Capistrano迁移到两个数据库

时间:2014-01-20 12:12:43

标签: ruby-on-rails ruby ruby-on-rails-4 capistrano

我最近在我的开发Rails站点添加了第二个数据库,并进行了自定义rake任务,'SysConfig:db:migrate',如下所示:

namespace :SysConfig do

  task :set_custom_db_config_paths do
    ENV['SCHEMA'] = 'db_sysconfig/schema.rb'
    Rails.application.config.paths['db'] = ['db_sysconfig']
    Rails.application.config.paths['db/migrate'] = ['db_sysconfig/migrate']
    Rails.application.config.paths['db/seeds'] = ['db_sysconfig/seeds.rb']
    Rails.application.config.paths['config/database'] = ['config/database_sysconfig.yml']
  end

  namespace :db do
    task :migrate => :set_custom_db_config_paths do
      Rake::Task["db:migrate"].invoke
    end

    ...

  end
end

这将获取db_sysconfig / migrate文件夹中的所有迁移,并将它们部署到SysConfig数据库。但是,我正在努力研究如何在Capistrano的deploy.rb文件中设置此任务,因为我部署到登台/生产时。有谁知道如何在capistrano中设置应用程序配置路径?

Capistrano'2.15.4' Rails'4.0.2' Ruby'2.1.0'

1 个答案:

答案 0 :(得分:0)

我在deploy.rb文件中的deploy命名空间中添加了一个新任务:

namespace :deploy do
  ...
  task :SysConfig, roles: :app do
    run "cd #{current_path}; RAILS_ENV=#{rails_env} rake SysConfig:db:migrate"
  end
end

after "deploy:migrate", "deploy:SysConfig"

然后我将其设置为在运行deploy:migrate任务后运行,这导致它同时成功迁移到两个数据库。