LoginSignup
0
0

More than 5 years have passed since last update.

tmux上でrbenv 経由でRubyのバージョンが切り替わらなくなった件

Last updated at Posted at 2014-12-16

最近、開発環境周りを刷新してやろうと、色々とゴニョゴニョやってたら、
いつのまにか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 を追加すれば解決しました。

~/.zshrc
$ 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スクリプトの実装を見てみました。

/usr/local/Cellar/rbenv/0.4.0/libexec/rbenv-init(l.74-76)
...(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 の実装を見てみると

/usr/local/Cellar/rbenv/0.4.0/libexec/rbenv(l.23-28)
...(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 は変わらないよね!(ドヤァ

~/.zshrc
export RBENV_ROOT=""

でもいける気がするけど、なんか気に食わかなったのでやりませんでした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0