gpt4 book ai didi

ruby-on-rails - 将应用程序从 Heroku 迁移到 AWS 的高级说明?

转载 作者:行者123 更新时间:2023-11-29 11:28:28 26 4
gpt4 key购买 nike

我是一名新手系统管理员,正在寻找有关如何将整个 Rails 应用程序从 Heroku 迁移到 AWS (elastic beanstalk) 的一般指导。我使用很少量的 heroku 服务(sendgrid 除外)。我最大的障碍是应用程序本身的集成和迁移数据库(将从 heroku postgresql 到 AWS RDS postgresql)。

感谢那些经历过相同迁移的人的任何见解。谢谢你!!!

最佳答案

我已经将几个客户端从 Heroku 迁移到 Elastic Beanstalk,因此我整理了这些关于如何设置 Rails 应用程序以在 Elastic Beanstalk 上运行的高级说明:

网络进程

在 Elastic Beanstalk 中,您可以通过多种方式运行 Rails 应用程序。

您可以使用 Elastic Beanstalk 的 Ruby 平台直接在预配置的 EC2 实例上部署 Rails 应用程序。它将要求您了解亚马逊如何选择建立这个平台,以及您应该如何将您的应用程序与其集成。

如果您有一点 Docker 经验,我认为更好的方法是使用 Elastic Beanstalk 的 Docker 平台并将您的 Rails 应用程序部署为 Docker 容器。

您可以使用 Heroku 的 cedar Docker 镜像作为您的 Rails 容器的基础,或者您可以按照 this tutorial 创建您自己的 Rails 镜像.无论哪种方式,假设您有 Docker 的基本经验,您将很快得到一个可部署的工件,它对运行环境的依赖性较低。

请注意,目前 Elastic Beanstalk 有两个版本的 Docker 平台。第一个版本允许您为每个 EC2 实例运行一个 Docker 容器。第二个版本使用 AWS ECS(弹性容器服务)在同一台 EC2 机器上调度多个 Docker 容器。即使您认为不需要多容器功能,我也建议您使用第二个版本。

后台作业

如果您使用异步 worker 作为 Rails 应用程序的一部分,您可以通过多种方式让它们在 Elastic Beanstalk 上运行。

您可以使用 Docker 的多容器平台在同一台 EC2 机器上运行工作进程和 Rails 网络进程。您可以对常规的非 Docker Rails 平台使用类似的方法。使用“.ebextensions”在运行您的 Web 进程的所有 EC2 实例上配置工作守护进程。

这种方法的主要缺点是您无法独立于 Web 层扩展您的工作层容量。根据您的应用程序的性质,worker 和 web 进程可能会争夺资源,这也是不受欢迎的。

另一种方法是使用 Elastic Beanstalk 的工作环境。您仍然可以使用相同的 Docker/Rails 平台,但 Elastic Beanstalk 不会将负载均衡器附加到您的工作应用程序。相反,它将创建一个 SQS 队列并在每台运行您的应用程序的 EC2 机器上运行一个代理,该代理会将 SQS 消息的内容发布到您的应用程序。除了 SQS 之外,没有对其他队列的官方支持,但是您始终可以让您的应用程序忽略本地 SQS 代理,而只听取您想要使用的任何其他队列系统。

数据库迁移

正如 Richard 在他的回答中提到的,将 Postgresql 数据库从 Heroku 迁移到 RDS(Amazon 的托管数据库服务)的最简单方法是在将数据库数据从一个平台导出和导入到其他。幸运的是,在我完成的大多数迁移中,这不是一个大问题,总是可以找到可以安排一个小维护窗口的时间,通常是在一天中网站活跃用户较少的时间.

要涵盖的另一个重要主题是如何将您在应用程序中使用的 Heroku 插件迁移到 Elastic Beanstalk。您提到您很少使用第三方服务,因此我不会介绍如何将这些服务与您的应用程序一起迁移到 AWS。

如果您想了解有关 Heroku 插件迁移的更多信息,我发表了一篇文章,其中详细介绍了 how to replicate Heroku addons on AWS .

希望对您有所帮助。

关于ruby-on-rails - 将应用程序从 Heroku 迁移到 AWS 的高级说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com