Ruby on rails 并发部署上的Rails3 ActiveRecord迁移

Ruby on rails 并发部署上的Rails3 ActiveRecord迁移,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,当您同时部署到多台计算机时,如何确保迁移只运行一次 我现在要做的是,当我确实有这样的更改时,选择一台机器来运行迁移。理想情况下,部署是无脑的,这个过程会为我解决这个问题 我目前的想法是让迁移器查找要迁移的模式,并在有事情要做时获取锁。如果已经获取了锁,它将一起跳过迁移。阅读ActiveRecord代码时,它似乎不支持这样的想法,因此需要进行一些修补 你的想法是什么?你在用什么?您可以指定数据库服务器的列表,并将其中一个标记为主服务器。迁移将仅在该服务器上运行: role :app, 'examp

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

我现在要做的是,当我确实有这样的更改时,选择一台机器来运行迁移。理想情况下,部署是无脑的,这个过程会为我解决这个问题

我目前的想法是让迁移器查找要迁移的模式,并在有事情要做时获取锁。如果已经获取了锁,它将一起跳过迁移。阅读ActiveRecord代码时,它似乎不支持这样的想法,因此需要进行一些修补

你的想法是什么?

你在用什么?您可以指定数据库服务器的列表,并将其中一个标记为主服务器。迁移将仅在该服务器上运行:

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'

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

谢谢您的绝招,但我正在寻找通用解决方案。我想我最终会用Redis实现一个锁。@zimbatm锁是不够的。你应该首先考虑运行一台机器,运行你的迁移,然后运行你的其他机器,这样他们就不会跳过迁移,并开始运行你的新代码,而你的数据库还没有更新。