Ruby
capistrano

Capistrano で.bash_profileに書いてある環境変数が読まれない件

More than 1 year has passed since last update.

Capistrano ド初心者の僕が、表題の問題にぶつかったので、解決策と、ついでにそこに至るまでに調べたことをメモ書きしておきます。
ちょっと散文気味ですが Capistrano の情報ぐぐっても少なかったので、こんなのでも誰かの足しにはなるかなと。

TL;DR: .bash_profile は読まれないから .bashrc に書く

「.bash_profile は読まれないから .bashrc に書く」 それだけです。超・シンプルです。

元ネタ:Stackoverflowでの質問

http://stackoverflow.com/questions/25479348/how-can-i-instruct-capistrano-3-to-load-my-shell-environment-variables-set-at-re

色々と調べたんですけど、結局このStackoverflowに書いてました。何か回答者が最初書き間違えたみたいで「 .bashrc じゃなく. bash_profile に書くといいよ」って書いてあったりで紛らわしいですが、コメント欄を見ると「For me it reads .bashrc and does not read .bash_profile. I'm using CentOS.」とか言ってますね。

ところで

since it's not interactive shell

ということらしくて、インタラクティブシェルじゃないから読まれないってのは分かったんですけど、じゃあ何シェルなんですかね? 詳しい人いたら教えて頂けると嬉しいです。

ほか余談

Capistranoのお勉強・デバッグってどうしたらええんや…というので手探りして、この辺から理解していくと良さそうだと思いました。ということで余談ですが書いておきます。

Capistrano のドキュメントつまみ読み

もちろんCapistrano自体のREADMEは最初に読んだ方がいいんですけど、README自体は内容が薄めで、いまいちその次に何を読んだら良いのかのとっかかりがないように思えた。

SSHでのコマンド実行系のメソッド(execute,capture,test)はCapistranoから切り離されたSSHKitっていうライブラリの管轄らしい。なので以下の2つのドキュメントを読むととりあえずCapistranoでのコマンド実行がどういう仕組みなのか分かってくると思う。

Capistrano console がデバッグに便利

Capfileなりdeploy.rbなりに require 'capistrano/console' って書いて cap foobar console などと実行すると、capistranoと限りなく近い環境のコンソールを立ち上げる事が出来ます。
単にsshログインした場合と何が異なっているのか確認しやすくて良いです。