capコマンドでrake taskを実行するときの話しではなく、rake taskをdeply時に実行するようにしたときの話しです。言葉だと想像しにくいと思うので、コードで書くと
namespace :new_task do
desc 'Exeute new task'
task :new_task do
on roles(:db) do |host|
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, 'new_task:new_task'
end
end
end
end
end
after 'deploy:migrate', 'new_task:new_task'
こんな感じにmigrateの後にrake new_task:new_task
を常に実行したいときのケースです。
肝はrelease_path
内でtaskを実行することです。
既にdeploy済みのコードにrake taskがある場合、current_path
でも問題ないのですが、これからdeployするコードに追加したrake taskを実行する場合、エラーになります。これはdeployが完了したときに、current_path
のシムリンクが張り替えられるため、current_path内のコードにrake taskが存在しません。なので、これからdeployするコードに追加したrake taskを実行する場合は、release_path
でrake taskを実行する必要があります。