2010-07-17 117 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