2010-07-17 77 views
1

我有一個不在存儲庫根目錄中的rails應用程序。部署後,其他一些靜態文件將部署在父目錄中。該結構是這樣的:Capistrano部署更改遷移目錄

root 
-- otherstuff 
-- railsapp 

當我做帽部署一個部署:遷移時,Capistrano的命令得到執行這個樣子的,這當然不起作用:

cd /u/apps/minicart/releases/20100717215044; rake RAILS_ENV=staging db:migrate 

如何改變這種做法,這將是:

cd /u/apps/minicart/releases/20100717215044/railsapp; rake RAILS_ENV=staging db:migrate 

我把它通過添加部署後執行此命令任務工作:finalize_update,但我寧願使用內置我n方法,加上我的黑客版本在每次部署時執行。

任何意見,將不勝感激。

Tim

+0

每個部署的靜態文件是否相同? – Eimantas 2010-07-17 22:49:02

+0

不,他們也改變了,雖然沒有那麼頻繁。 – 2010-07-18 17:13:38

回答

2

原來這很簡單。

我將部署名稱空間添加到了我的deploy.rb文件,然後重新定義了遷移方法。現在我的方法運行在cap deploy:migrations上。

namespace :deploy do 
    desc "Migrating the database" 
    task :migrate, :roles => :app do 
    run <<-CMD 
     cd #{release_path}/minicart; RAILS_ENV=#{stage} rake db:migrate 
    CMD 
    end 
end