capistrano2を3にした

rails (4.1.2)
capistrano (3.2.1)
capistrano-bundler (1.1.2)
capistrano-rails (1.1.1)
capistrano-rvm (0.1.1)

cap2とcap3でデプロイコマンドは若干違ってる。(3は:migrationsがいらない。)
今自分は2と3を使っているプロジェクトをそれぞれやっており、
プロジェクトによってデプロイコマンドが変わることにストレスを感じていたのでアップグレードしようと思った次第。

アップグレードは下記記事を参考にと、cap3で動いているコードを見た感じ。
http://capistranorb.com/documentation/upgrading/

詰まったところ

エラーメッセージが不親切

cap2構文との互換性が一切ないので素のスタックトレースが出てくる。

unicorn

アプリケーションサーバのpidを置くファイルパスが間違ったまま今まで運用していて(cap2では動いてた)、cap3にした時にunicornをupgradeできないということがあった。

Couldn't upgrade,  starting 'bundle exec unicorn_rails -E production -D -c 

初期化スクリプトでは、APP_ROOT/shared/tmp/pids/unicorn.pid
unicornの設定ファイルでは、APP_ROOT/current/pids/unicorn.pid (tmpディレクトリがない)
というようなパスで書いいてこのままpidsファイルをshared配下に置く設定にすると、シンボリックリンクが噛み合ないことになってた。
本番サーバでのアップグレード作業時は、サーバが停止しないようpidsファイルを正しいパスにコピーしてunicornのupgradeが動くようになった。

linked_dirs

linked_dirsに相対パスを指定するとshared配下にシンボリックを貼ってくれる便利機能がある。
そして既にあるディレクトリを指定すると中身が消滅する。

public/system

シンボリックリンクを貼る時は退避を忘れずに......。<追記>
sheredへのシンボリックリンクのパスが2と3で変わってる。

はやい

tmp以下をshared配下におくようにしたのでprecompileが必要なものだけすようになったっぽくて早くなった。
(assetsの量によるけど)5分かかっていたのが1分でデプロイが終わるようになった。

まとめ

バージョンあげると浄化される。