У меня есть приложение для направляющих, которое не находится в корневом каталоге репозитория. Когда это развертывается, некоторые другие статические файлы развертываются с ним в родительском каталоге. Структура - что-то вроде этого:
root
-- otherstuff
-- railsapp
Когда я делаю развертывание с ограничением deploy:migrations, команда 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, но я предпочел бы использовать созданный в методе, плюс моя взломанная версия выполняется с каждым развертыванием.
Любой совет ценился бы.
Tim
Это оказалось очень просто.
Я добавил пространство имен deploy в свой файл deploy.rb, а затем переопределил метод migrate. Теперь мой метод работает на шапке 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