Rails3 ActiveRecord并发部署的迁移

zim*_*atm 5 ruby activerecord ruby-on-rails

当您同时部署到多台计算机时,如何确保迁移仅运行一次?

我现在要做的是选择一台机器来运行迁移,当我对这种类型进行更改时.理想情况下,部署是无脑的,这个过程会照顾我.

我的想法当前是让迁移器寻找要迁移的模式并获取锁定(如果有事可做).如果已经获取了锁,它将完全跳过迁移.阅读ActiveRecord代码它似乎不支持这样的想法所以它需要一些修补.

你有什么想法?

ice*_*eam 2

你在使用卡皮斯特拉诺吗?您可以指定数据库服务器列表并将其中一个标记为主服务器。迁移将仅在该服务器上运行:

role :app, 'example.com.com'
role :web, 'example.com'
role :db,  'db01.example.com', :primary => true
role :db,  'db02.example.com'
role :db, 'db03.example.com'
Run Code Online (Sandbox Code Playgroud)

编辑: :db 角色不适合用于未运行 Rails 应用程序代码的单独数据库服务器。这可能不是你的设置。