最近、開発環境周りを刷新してやろうと、色々とゴニョゴニョやってたら、
いつのまにかtmux上で
$ rbenv global xxx(rbenvでインストールしたrubyバージョン)
が実行できなくなっていた。
環境
環境 | バージョン |
---|---|
MacOSX | 10.9.5 |
Homebrew | 0.9.5 |
tmux | 1.9a |
rbenv | 0.4.0 |
現象
具体的には現象はこう。
$ rbenv versions
system
* 1.9.3-p125 (set by /Users/uryu/.rbenv/version)
2.0.0-p576
2.1.3
jruby-1.7.3
$ rbenv versions
* system (set by /usr/local/opt/rbenv/version)
systemしかない…
しかも、set by の部分が「/usr/local/opt/rbenv」になってる。
(rbenv を Homebrew でいれてるからだと思う。)
そのまま無視して、ruby のバージョン切り替えようと実施しても
$ rbenv global 2.1.3
rbenv: version `2.1.3' not installed
で、ですよね…
PATHは下記の通り。
$ echo $PATH
/Users/uryu/.rbenv/shims:/Users/uryu/.rbenv/bin:...(snip)...
$ echo $PATH
/usr/local/opt/rbenv/shims:/Users/uryu/.rbenv/bin:/Users/uryu/.rbenv/shims:...(snip)...
/usr/local/opt/rbenv が先頭に来てますね。
$HOME/.rbenv/shims tmux上でもロードされてるのは.zshrcにこのパスだけベタで書いてるからです。
tmux上でもrbenvのパスを固定できるようにできないのかな。
ここらへん参考にしてみても原因が違うのか解決にいたらず。
ぐぬぬ…orz
解決に至ったら追記します。
追記(2014/12/16 18:30)
~/.zshrcに下記のように RBENV_ROOT を追加すれば解決しました。
$ cat ~/.zshrc
...(snip)...
export RBENV_ROOT=$HOME/.rbenv ← 追記
eval "$(rbenv init - zsh)"
解決に向かった要因
$ eval "$(rbenv init - zsh)"
こいつが怪しいんじゃないかと思い、
=> ~/.zshrc から上記コマンドを消してパス見てみたら、rbenvのパスが追加されていない
=> じゃあ、パスに~/.rbenv/shims のパスをベタで書いて、eval 実行しなかったらどうなるんだろう。
=> パスは通ってるけど、現象は変わらず。(しかも補完も効かなくなった…)
=> eval が /usr/local/opt/rbenv/shims のパスを追加してるんだ。
=> こいつを~/.rbenv/shims に固定することできないかな… ← 追記前まで
調べても出てこないし、rbenv-initスクリプトの実装を見てみました。
...(snip)...
mkdir -p "${RBENV_ROOT}/"{shims,versions}
echo 'export PATH="'${RBENV_ROOT}'/shims:${PATH}"'
...(snip)...
お、echo だけど、こいつ怪しいな。
$RBENV_ROOT ってなんだよ…
$ echo $RBENV_ROOT
$ echo $RBENV_ROOT
/usr/local/opt/rbenv
tmux 上では設定されるのね。
(これがどこで設定されているかまでは追えませんでした…)
んで、今度は/usr/local/Cellar/rbenv/0.4.0/libexec/rbenv の実装を見てみると
...(snip)...
if [ -z "${RBENV_ROOT}" ]; then
RBENV_ROOT="${HOME}/.rbenv"
else
RBENV_ROOT="${RBENV_ROOT%/}"
fi
export RBENV_ROOT
...(snip)...
となっている。
$RBENV_ROOT が既に設定されていたら、そこをルートディレクトリにすると。よくあるパターンですね。
ってことは、$RBENV_ROOT を常に~/.rbenv にしておけば、
tmux 上でも$RBENV_ROOT は変わらないよね!(ドヤァ
※
export RBENV_ROOT=""
でもいける気がするけど、なんか気に食わかなったのでやりませんでした。