在 elasticbeanstalk 部署过程中应该在哪里运行迁移?

在 elasticbeanstalk 部署过程中应该在哪里运行迁移?

我很好奇人们如何db migrate在他们的 eb 应用程序上运行类似命令。如果您将其添加为,.ebextensions我担心当您为一个应用程序拥有多个实例时,如果多台服务器尝试运行相同的迁移,可能会发生冲突。

在部署过程的什么时候应该db migrate运行命令?

答案1

leader_only您可以在配置文件中尝试标志:。ebextensions即使您在多个实例中部署了应用程序,此标志也会让您的迁移只运行一次。例如,将此文件保存到项目的根目录中,路径为:/.ebextensions/migration.config

option_settings:
container_commands:
    database_migration:
        leader_only: true
        command: "db migrate"

更多信息:AWS Elastic Beanstalk 官方文档

答案2

由于 OP 没有指定平台,我想我应该.ebextensions/migration.config为 Ruby on Rails 添加一个特定的配置,因为我也遇到了这个确切的问题:

container_commands:
  12migrate:
    command: rake db:migrate
    leader_only: true

答案3

在我使用 PostgreSQL 将 Rails 5.1.4 部署到 Elastic Beanstalk 时,这个顺序是可行的:

  1. 将您的代码部署到 EB。我使用 EB 控制台,但您也可以使用 CLI。
  2. 通过 SSH 连接到 EC2 应用服务器
  3. 切换到应用程序目录:cd /var/应用程序/当前/
  4. 数据库:重置

顺便说一句,我需要关闭用于检查 RDS 数据库的 pgAdminIII。由于我已连接,这会锁定数据库并阻止最后一步。

我还在 EB 控制台中将 RAILS_SKIP_MIGRATIONS 设置为 TRUE(在配置 > 软件下)。假设您将其保留为默认值 FALSE,则部署将运行所需的任何迁移。

因此,在回答最初的问题时,您可以运行rails db:重置(或者rails db:迁移) 在应用服务器上。您没有 (也不能) 通过 SSH 连接到 RDS 服务器。

相关内容