【解決】Your Ruby version is 2.0.0, but your Gemfile specified 1.9.3

f:id:syonx:20140607212957p:plain

何をやろうとしたか

Heroku で運用している Gollum を Procfile 経由で利用するため$ bundle exec foreman startで起動を試みるもYour Ruby version is 2.0.0, but your Gemfile specified 1.9.3が発生。

解決までの経緯

  • $ rbenv versionで現在の Ruby バージョンを確認。
    1.9.3-p545 (set by /usr/local/var/rbenv/version)で問題なし。

  • $ bundle exec ruby -vで bundler 上のバージョンを確認。
    ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-darwin13.1.0]で問題なし。

  • この Issue を参照しいろいろ試したが、特に進展なし。
    Your Ruby version is 1.9.3, but your Gemfile specified 2.0.0 · Issue #400 · sstephenson/rbenv

  • bundler による Gem のインストール先パスvendor/bundleがキレイじゃないのかと予想しフォルダごと削除し再インストール。結果変わらず。

  • 「このままでは今までできていたことができなくなるヤバい」と思い、従来の起動方法$ bundle exec gollumを試したところあっさり起動。全体的にぶっ壊したかと思っていたが、foreman に原因があるところまで絞り込めた。

  • あなたどちらの foreman さんですかということで$ bundle exec which foremanで尋ねると/usr/bin/foremanとのお返事。お前ちゃうわ。

  • $ bundle exec gem listを実行。ここで Gollum には foreman が含まれていないことに気づく。そもそも foreman は Heroku で動かすために利用するのであって、Gollum 自体を動かすのに必要なわけではない。

  • Gemfile にgem 'foreman'を追記。$ bundle install --path vendor/bundleで再インストール。

  • $ bundle exec which foreman
    /Users/Syon/GitHub/syon/wiki/vendor/bundle/ruby/1.9.1/bin/foreman

  • $ bundle exec foreman startが成功。

学んだこと

$ bundle exec ****で捕捉できなかったコマンドはそのままシステムに渡されるようだ。確かに Bundler は範囲を限定して利用したい Gem の管理を目的に使うが、それらもあくまで OS の上に乗って動くものだから当然といえば当然か。
$ bundle exec ps$ bundle exec vimも動いた。でも$ bundle exec brewだと同じエラーが発生。Ruby が関係しているコマンドに当たるとそのコマンドで使っているバージョンにすり替わって、Gemfile に対し rbenv にて使用中ではないバージョンが伝わりブロックされたのではと予想。