Ruby Error[Your Ruby version is 2.6.3, but your Gemfile specified 2.6.5]
上記のエラーに引っ掛かったので記事にしました。
環境
macOS Catalina 10.15.3
Rubyのversionを変えたくても変えられない。
rbenvの導入
ここを参考にして、rbenvというRubyのversion管理ツールを導入した。
$ brew install rbenv ruby-build
.bash_profileへ記述
eval "$(rbenv init -)"
または
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
初期化設定の反映
$ source ~/.bash_profile
目的とするversionのRubyをinstall
$ # install可能なversionを表示
$ rbenv install -l
$ # versionを指定してinstall
$ rbenv install 2.6.5
$ # インストールしたversionを使用可能な状態にする⇒shimsへの反映
$ rbenv rehash
README.md上に、新しいversionをinstallした後に関して、
Installs shims for all Ruby executables known to rbenv (i.e., ~/.rbenv/versions//bin/). Run this command after you install a new version of Ruby, or install a gem that provides commands.
と記述があるので、shimsをinstallするためにrbenv rehashを行います。
version切替
version切り替えに関して、このような記述があったので、ひとまず現在のディレクトリ下のversionを切り替えるために以下のようなコマンドを実行します。
$ rbenv local 2.6.5
もちろんglobal用も用意されています。
Current Directoryのversion確認
$ rbenv versions
system
* 2.6.5 (set by /Users/[user_name]/.rbenv/version)
2.6.5と表示されています!
目的のversionを手に入れることができた!と思いきや、、、
解決されたと思ったら、何故か同じエラーが繰り返される
何故でしょう?参照している場所が違うのではいか?
bundlerの場所を調べる
$ which bundler
/Users/hoge/.rbenv/shims/bundler
(hogeにはusernameが入る)
中身を確認
$ cat /Users/hoge/.rbenv/shims/bundler
#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x
program="${0##*/}"
if [ "$program" = "ruby" ]; then
for arg; do
case "$arg" in
-e* | -- ) break ;;
*/* )
if [ -f "$arg" ]; then
export RBENV_DIR="${arg%/*}"
break
fi
;;
esac
done
fi
export RBENV_ROOT="/Users/hoge/.rbenv"
exec "/usr/local/Cellar/rbenv/1.1.2/libexec/rbenv" exec "$program" "$@"
(hogeにはusernameが入る)
間違っていなさそう。
他にも
$ which ruby
$ which bundle
などと同様なことを確認したが、参照先に間違いはなさそうだった。
しかし、ここが原因だと指摘している記事もあった。
解決(たまたま)
たまたま以下のコマンドを打ち込んだら解決された。
$ bundle install
そもそもbundler, bundleとは
- bundler
プロジェクト内で使うGemのパッケージ管理ツール。 - bundle
bundlerを扱うコマンド
結局のところ、なぜ解決されたのか
$ bundle install
(省略)
Bundle complete! 5 Gemfile dependencies, 104 gems now installed.
Bundled gems are installed into `./vendor/bundle`
因みに上記のコマンドを実行することで、Gemfileをもとにgemをインストールすることができる。
上記のコマンドで解決されたわけだが、その訳は、rbenvと依存関係にあったパッケージがinstallされていなかったからではないか。と推測する。
しかし、ここに
This happens when there is a difference between the version of Ruby you are using locally, and the versions specified in your Gemfile and Gemfile.lock.
と書かれていることから、カレントディレクトリで使おうとしているrubyのversionとGemfileに記載されているrubyのversionが異なっていたことが原因だと考える。
試しにGemfileを見てみました。
$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 3.0.3
- RUBY VERSION: 2.6.5 (2019-10-01 patchlevel 114) [x86_64-darwin19]←確かに2.6.5になっている!!
- INSTALLATION DIRECTORY: /Users/s09519/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0
- USER INSTALLATION DIRECTORY: /Users/s09519/.gem/ruby/2.6.0
- RUBY EXECUTABLE: /Users/s09519/.rbenv/versions/2.6.5/bin/ruby
- GIT EXECUTABLE: /usr/bin/git
- EXECUTABLE DIRECTORY: /Users/s09519/.rbenv/versions/2.6.5/bin
- SPEC CACHE DIRECTORY: /Users/s09519/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /Users/s09519/.rbenv/versions/2.6.5/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-19
- GEM PATHS:
- /Users/s09519/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0
- /Users/s09519/.gem/ruby/2.6.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Users/s09519/.rbenv/versions/2.6.5/bin
- /usr/local/Cellar/rbenv/1.1.2/libexec
- /Users/s09519/.rbenv/shims
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
実行結果の3行目に書かれている通り、2.6.5と書かれていました。
自分がうっかり**$ rbenv lacal 2.6.5**する場所を間違えてしまったかもしれません。(記憶してなくて申し訳ないです)
参考
https://qiita.com/_am_/items/c1dbeb11f40bbbac8fd9
https://qiita.com/kHigasa/items/2e9764e7e80d1bdd8186
https://qiita.com/hisonl/items/162f70e612e8e96dba50