Parece haver várias maneiras diferentes postadas online para fazer uma tarefa Rake rodar durante uma implantação Rails usando Capistrano 3.
Isso é o que funcionou para mim, e acho que é mais limpo do que muitas das soluções que vi postadas no SO ou semelhante.
Digamos que você tenha uma tarefa Rake com a qual possa executar localmente rake system:update_rules
. Em seguida, você deseja adicionar o seguinte ao seu deploy.rb :
namespace :system do
desc 'Update the system rules '
task :update_rules do
on roles(:all) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, 'system:update_rules'
end
end
end
end
end
Então, no topo do seu deploy.rb, coloque:
after 'deploy:published', 'system:update_rules'
Isso será executado depois que a implantação terminar tudo o mais, o que garante que as alterações feitas em sua aplicação serão refletidas quando Capistrano executar a tarefa.