Capistranoでハマったのでメモ


capistrano使ってて自分でtaskを作ってゴニョゴニョしたい時とか有るじゃないですか? それをやっててハマった訳なんですよ。恥ずかしながら、今までロクに自分でcapistranoを弄ったことなかったので気付くまで時間かかりました。capistranoをよく使う方的には当たり前な挙動なのかも知れないのですが、ハマったのはコレです。

cap shell

cap> cd /tmp
cap> pwd 

これ、まさかの "/home/[user-name]" です。仕組を想像してみれば考え辛い結果(中を見てないのですが推測するに、こういうソフトウェアなので、runメソッドの度にワンセッションをブロードキャストしながら連続実行しているのでしょう)でもないのですがサーバー設定用のシェルスクリプト書いているつもりでノリノリでやってみたらハマっちゃったというのが顛末です。

cap shell
cap> cd /tmp && pwd 

こうすれば結果は "/tmp" になります。環境変数を設定しながらビルドする場合もそうです。

cap export JAVA_HOME=/path/to/java/home && cd /path/to/workdir && git clone git@githost/project/master && cd /path/to/project && /path/to/maven/bin/mvn package -Pproduction

せっかくServer側にCapistranoを設定しなくても良いというのが魅力に感じたポイントなので環境変数はどこまでサーバーのセットアップ時にやっておくのか? (全サーバーに.bashrcを整えておく) というのが出てしまいそうなのが悩み所です。そこでタスクの内容をその場でシェルスクリプトとしてジェネレートして、送り付けた後に実行するというのも良いのかな? と思ったところ、

こんなの見付けたので、ついでにメモ。