Capistrano の on_no_matching_servers で no servers matched でもタスクを継続する
Capistrano で role を指定してtaskつくったり、role を指定して run したときに、その対象の role がサーバリストにないと、
$ cap apache2:afterdeploy * 17:54:40 == Currently executing `apache2:afterdeploy' * executing "sudo -p 'sudo password: ' a2ensite crocos" `apache2:afterdeploy' is only run for servers matching {:roles=>:apache2}, but no servers matched
などとなって、止まってしまう。
これはだるいなーとおもっていたところ、patch 的な gist を見つけ、議論を追っていたら pull request されとりこまれていたようだ。9 months ago だから結構前かな。とりあえず手元では 2.11.2 で確認。
- capistrano skip NoMatchingServers
- It should be possible to continue executing task chain on NoMatchingServersError by cgriego · Pull Request #51 · capistrano/capistrano · GitHub
で、
task に指定したり、
desc "apache2 after deploy" task :afterdeploy, :roles => :apache2 do ... end
run に指定したりすれば、
run "#{sudo} a2ensite crocos", :roles => :crocos_markting, :on_no_matching_servers => :continue
今度は実行される
$ cap apache2:afterdeploy * 17:54:30 == Currently executing `apache2:afterdeploy' * executing "sudo -p 'sudo password: ' a2ensite crocos" ** skipping `apache2:afterdeploy' because no servers matched * executing "sudo -p 'sudo password: ' ... .... command finished in 91ms
めでたしめでたし。