肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

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 で確認。

で、

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

めでたしめでたし。