如果存在,请从Capistrano运行rake任务

问题描述 投票:1回答:1

我需要创建一个运行自定义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
ruby-on-rails ruby rake capistrano capistrano3
1个回答
1
投票

我最终只是使用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
© www.soinside.com 2019 - 2024. All rights reserved.