Capistrano部署更改迁移目录

时间:2010-07-17 22:18:23

标签: ruby-on-rails deployment capistrano

我有一个rails应用程序,它不在存储库的根目录中。部署时,会在父目录中部署其他一些静态文件。结构是这样的:

root
-- otherstuff
-- railsapp

当我使用cap deploy进行部署:迁移时,执行的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

我通过在deploy:finalize_update之后添加执行此命令的任务来实现它,但我更喜欢使用内置方法,而且每次部署都会执行我的黑客版本。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

事实证明这很简单。

我在deploy.rb文件中添加了一个deploy命名空间,然后重新定义了migrate方法。现在我的方法运行在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