ruby-on-rails - 并发部署时的 Rails3 ActiveRecord 迁移

标签 ruby-on-rails ruby activerecord

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

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

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

你的想法是什么?

最佳答案

你在使用 Capistrano ?您可以指定数据库服务器列表并将其中一个标记为主要服务器。迁移只会在该服务器上运行:

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'

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

关于ruby-on-rails - 并发部署时的 Rails3 ActiveRecord 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627714/

相关文章:

ruby-on-rails - 在 VM Vagrant Box 中创建 Windows 上的 Ruby on Rails 环境

mysql - 如何使用多个数据库为 Rails 创建迁移

ruby - 我如何 robuSTLy 解析格式错误的 CSV?

ruby-on-rails - RoR3+Mongoid : How to compare fields of collection/table when querying?

ruby-on-rails - 为什么使用 Ruby 而不是 Smalltalk?

ruby-on-rails - JOIN ON ... 以及在 ActiveRecord 中急切加载关联时的条件

ruby-on-rails - 找不到没有 ID 的用户 Hartl rails 教程

ruby-on-rails - 建立多态 ActiveRecord 关联的正确方法

ruby-on-rails - 为什么 postgres 9.3 表不断丢失主键和索引?

ruby - 如何在 Ruby 中使用 RegEx 更改字符串中字母的大小写