我有一个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之后添加执行此命令的任务来实现它,但我更喜欢使用内置方法,而且每次部署都会执行我的黑客版本。
任何建议都将受到赞赏。
添
答案 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