我需要创建一个运行自定义rake任务的Capistrano预部署步骤。
在deploy.rb:
中before 'deploy:starting', 'db:rollback_staging'
namespace :db do
desc 'Rollback staging db only if PR already deployed requires rollback'
task :rollback_staging do
on roles(:master) do
within current_path.to_s do
with rails_env: 'staging' do
execute :rake, 'release:rollback_staging'
end
end
end
end
end
问题是,部署此代码时,服务器上尚不存在rake任务,因此部署失败,并出现以下问题:
rake stdout: rake aborted!
Don't know how to build task 'release:rollback_staging' (See the list of available tasks with `rake --tasks`)
[是否有方法可以检查Capistrano中的rake任务?像:
with rails_env: 'staging' do
execute :rake, 'release:rollback_staging' if rake_exists? 'release:rollback_staging'
end
我最终只是使用raise_on_non_zero_exit: false
忽略了rake任务的退出代码,而不是0:
with rails_env: 'staging' do
execute :rake, 'release:restore_staging', raise_on_non_zero_exit: false
end