Capistranoでon rolesだけなく on host 又は on serverみたいに1台指定固定をやりたい時の方法
こんにちは。
今日も作業の中でハマった事を書きたいと思います。
誰かのお役に立ってると嬉しいです。
Capistranoでtaskを作る時に、taskを実行するサーバーをロールで指定出来ると思います。
これをとある1サーバーだけでやりたい場合にどうするの?というものです。
今回は
- 1サーバーでだけ動かしたい処理がある(だけどrun_locallyではない)
- roleを切りたくない (無駄に増やしたくない)
という所があったので処理を検討しました。
on roles(:all)
を指定して、
コマンドライン側でcap prod cleanup:repository HOSTS=hostname
とする事も出来ますが
今回は指定ではなく、強制的にそのサーバーのみとしたかったので実装側で解決させたかったのです。
以下が、on roles での指定になると思います。
namespace :cleanup do desc "comment" task :repository do on roles(:rolename) do ~処理~ end end end
これを以下の様にする事で1サーバー指定で実行する事が出来ました。
カンマ区切りで複数かけるかな?と思ったけど、それはダメでした。
namespace :cleanup do desc "comment" task :repository do on "servername" do ~処理~ end end end
今回私は、configの方にset repository_server=testserver
と定義しておいたので、
以下の様に書く事でソースコードから定義をconfigに移す事が出来ました。
namespace :cleanup do desc "comment" task :repository do on fetch(:repository_server) do ~処理~ end end end
以上です。