2013-10-16 50 views
0

我們的rails應用程序(3.2.12)有兩個數據庫,一個內容數據庫和一個用戶數據庫。如何覆蓋deploy:migrate(rakefile here),以便在兩個目標數據庫的「cap production deploy:cold」遷移過程中相應地運行。如何覆蓋Capistrano的部署:migrate

本質上講,它應該這樣做在部署

** transaction: commit 
    * 2013-10-16 02:26:15 executing `deploy:migrate' 
    * executing "cd /home/deployer/apps/project/releases/20131015152439 && bundle exec rake RAILS_ENV=production db:migrate" 
    * executing "cd /home/deployer/apps/project/releases/20131015152439 && bundle exec rake RAILS_ENV=production user:db:migrate" 

任何幫助將非常感激。

編輯:我的確在部署命名空間

namespace :deploy do 
    set :migration_role, fetch(:migration_role, :db) 

    task :migrate do 
    on primary fetch(:migration_role) do 
     within release_path do 
     with rails_env: fetch(:rails_env) do 
      execute :rake, "db:migrate" 
      execute :rake, "user:db:migrate" 
     end 
     end 
    end 
    end 
    after 'deploy:updated', 'deploy:migrate' 
end 

這將引發錯誤與我自己的任務替換任務「未定義的方法`主'」。

+0

您可以a)用您自己的任務替換任務b)在該任務之前或之後添加其他任務 – phoet

回答

0

它應該是:初級?

或者

task :migrate, :only => { :primary => true } 

您也可能希望將「之後」行添加到命名空間聲明之外。

0

任務deploy:migrate不會自動運行。您可以在deploy:update_code之後提供您自己的任務,其中您爲兩個不同的數據庫運行兩個db:migrate命令。

例如,

namespace :my_namespace 
    task :migrate do 
    your db:migrate statements go here... 
    end 
end 

after 'deploy:update_code', 'my_namespace:migrate' 
+0

自Capistrano 3起,遷移*自動*運行。見這裏:https://github.com/capistrano/rails/blob/b5f41b6482a0f481077f351d058307b9b29c9fac/lib/capistrano/tasks/migrations.rake#L23 – awendt

0

Capistrano的版本:3.6.1(耙版本:11.3.0)

添加這只是爲了幫助別人誰遇到同樣的問題。

  1. 首先你需要清除遷移行動

配置/ deploy.rb

Rake::Task['deploy:migrate'].clear_actions 
  • 二編寫自己的遷移任務
  • config/deploy.rb(我用過sinatra)

    namespace :deploy do 
        desc 'migration' 
        task :migrate do 
        on roles(:app) do |host| 
         with rails_env: fetch(:rails_env) do 
         within current_path do 
          execute :bundle, :exec, :rake, "db:migrate RACK_ENV=#{fetch(:rails_env)}" 
         end 
         end 
        end 
        end 
    end 
    
  • 打電話給你的遷移任務
  • 由於部署:遷移將自動被調用,所以你不需要做任何事情。