我很好奇人们如何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"
答案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 时,这个顺序是可行的:
- 将您的代码部署到 EB。我使用 EB 控制台,但您也可以使用 CLI。
- 通过 SSH 连接到 EC2 应用服务器
- 切换到应用程序目录:cd /var/应用程序/当前/
- 数据库:重置
顺便说一句,我需要关闭用于检查 RDS 数据库的 pgAdminIII。由于我已连接,这会锁定数据库并阻止最后一步。
我还在 EB 控制台中将 RAILS_SKIP_MIGRATIONS 设置为 TRUE(在配置 > 软件下)。假设您将其保留为默认值 FALSE,则部署将运行所需的任何迁移。
因此,在回答最初的问题时,您可以运行rails db:重置(或者rails db:迁移) 在应用服务器上。您没有 (也不能) 通过 SSH 连接到 RDS 服务器。