使用Chef,如何只运行一次Rails迁移?

Jas*_*ren 5 migration ruby-on-rails chef-infra

我正在运行带有三个Web服务器和一个数据库服务器(AWS RDS服务器)的Rails应用程序.我与Chef Solo一起部署.目前我在rails_app配方中设置'migrate true',并且"rake db:migrate"在每个Web服务器上运行一次.

当迁移很短时,这通常不是问题.(第一个成功,第二个和第三个被跳过,因为schema_migrations表列出了最新的模式版本.)但是当迁移需要很长时间时,第二个和第三个Web服务器会在第一个和第三个Web服务器完成迁移之前尝试迁移.他们失败,厨师退出失败.请注意,迁移已成功(至少在我尝试过时),但新版本的整体部署失败.(如果我再次运行它,一切都会成功,因为已经运行了迁移.)

我的问题是,确保迁移只运行一次的最佳/规范方法是什么?

dee*_*thi 0

也许您可以检查 db/migrate.rb 文件的内容是否已更改。如果是这样,则有条件地调用 migrate true。如果你使用的是git,你可以检查

执行“git diff HEAD@{1} HEAD db/migrate”

如果存在任何更改,则使用 migrate true。