akishin999の日記

調べた事などを書いて行きます。

Capistrano3 でデフォルトの環境を指定する

Capistrano3 からは、task の実行時にステージを指定しないと以下のようなメッセージが出るようになりました。

# cap deploy
Stage not set, please call something such as `cap production deploy`, where production is a stage you have defined.

capistrano-ext が不要になり、デフォルトで複数の環境を扱えるようになった為の変更のようです。

これはこれで便利なのですが、処理によってはステージを分ける必要のないものもあり、その場合でもいちいち明示的に指定しなければならないのはちょっと面倒でした。

というわけで何か方法はないか検索してみると、既に試している方がいました。

Capistrano 3: Setting a Default Stage
http://dylanmarkow.com/blog/2014/01/08/capistrano-3-setting-a-default-stage/

以下のようにすることでデフォルトのステージを設定でき、実行時の指定を省略することができるようになるようです。

Capfile を編集します。

# vi Capfile

Capfile の末尾に以下の二行を追記します。
ここでは production 環境をデフォルトにしました。

Rake::Task[:production].invoke
invoke :production

これで以降は「cap deploy」のようにステージを省略しても config/deploy/production.rb の内容が読み込まれ実行されるようになりました。

ただ、この設定が入っていると他のステージを指定しても production.rb の内容が読み込まれてしまうようなので、一度設定した場合は注意が必要そうです。
そのうち capistrano-ext のように「set :default_stage, "staging"」のような感じで指定できるようになって欲しいですね。