背景
Capistrano3でデプロイしようと思って色々やってたら、よく分からないエラーで落ちた。ログを調べたところ、どうやらデプロイ先サーバのログインシェルがtcshであることが原因っぽい。Capistrano側の設定かなにかでどうにかしたい。
結論
無理。
詳細
Stack Overflowに質問があり、下の方にそれっぽい回答があった。
https://stackoverflow.com/questions/21809480/capistrano-3-to-set-bash-shell-on-server-instead-csh
この方法を試そうと思ったが、よくよく考えるとデフォルトタスクの中身を全て書き換えるということになり、到底現実的ではなかった。
また、Githubのissueがあがっていた。
https://github.com/capistrano/capistrano/issues/1870
色々コメントがあるが、要約すると「(t)cshの文法は全然スタンダードじゃないし、Capistrano3はsh系のスクリプトでしか動作保証しまへん」とのこと。残念。
SSHKitのソースコードを読んでも明らかに(ba)sh前提で書かれているようなので、やれることはなさそう。
解決策
全サーバのログインシェルをbashにする
余談
Capistrano 3が(t)cshだと動かないという事実はどこにも書いていなかったのですが、先ほどのissueの中で「ドキュメントに書いとけや」的な要望があったからでしょうか、公式ドキュメントに一応記載されました。
http://capistranorb.com/documentation/upgrading/
↑の最下部
最後に
古いサーバ等でデフォルトのログインシェルがcsh系になっており、何らかの理由でログインシェルを変更できない場合は諦めて他のツールを使うしかない状況です。別にいいんですけど。あるいはCapistrano2系であれば動くっぽいですが未確認です。もし何かいいやり方があれば教えてください。