3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ローカルサーバーが立ち上がらないエラー:Could not find 'bundler' (2.1.4) required by your の解消

Posted at

概要

本件は過去記事2つの流れで、
Herokuにデプロイが完了し、% heroku run db:migrate 実施後本番環境での動作は確認したが、なぜか突如ローカルサーバーが立ち上がらなくなった話です。

【過去記事】
Herokuへのデプロイができないエラー:Failed to install gems via Bundler. の改善。
Herokuへのデプロイができないエラー:Could not detect rake tasks の改善。

おそらくこの段階で何かしらの環境構築が変更されたのでしょうか。ということが大前提にあります。

!注意!

この解決には sudoコマンドを用います。
sudoコマンド・・・端的にいうと権限者を駆使した強行突破コマンド(この認識に間違いがあるという有識者の方遠慮なくご指摘いただけますと幸いです。)
自己責任での実施をお願いいたします。

経緯

railsアプリケーションのデプロイに成功しました。
そこでローカルサーバーでの動作確認を行おうと、

% rails s

でローカルサーバーを立ち上げると、

Could not find 'bundler' (2.1.4) required by your /Users/アプリケーションのディレクトリ/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.

とエラーが発生し、サーバーが立ち上がりません。

せっかくデプロイまで完了したのにこの時点で涙目です。

ちなみにこのエラー、

「Gemfile.lockにbundlerの記述が指定されてるけど、そんなものないで?」

といったニュアンスのものです。
しかしながら、% bundler -vを実行すると、

Bundler version 2.1.4

と確かにあります。% gem list | grep bundlerを実行しても、

bundler 2.1.4

確かにありますよね!?

仮説と試したこと

①bundle update

エラー文に則り、bundle update --bundlerを試してみましたが、だめでした。

②Gemfile.lock削除。bundler2.1.4再インストール

ダメでした。

ここでGitを確認してみると、changesに何も反映されていませんでした。
あれれ、おかしいな・・・?
普通であればGemfile.lockが再構築されたのがコミットできるものだと思いましたが・・・。

解決方法

アプリケーションの他のファイルを操作すると、確かにGitのchangesには反映されています。
となると、gemのインストール先がおかしいのでは、という仮設に至りました。

% bundle install実施後に最後に緑文字でこのような文面が現れています。

Bundled gems are installed into `./vendor/bundle`

vendorというディレクトリに、インストールされたGem達が格納されてい流のがわかります。

**アプリケーションで読み込むBundler(Gem)が、違う場所に格納されているのでは?**という仮説が上がりました。

となると、どれだけbundle installしても同じようなエラーは出るだろうし、Gitのchangesにも反映されないのもこれのせいかもしれません。

そこでbundlerを管理も司るrbenvを再インストールすれば、あるいは・・・という仮説を教えていただきました。

rbenvについてはこちらの記事が参考になりました。
rbenvの役割

では、実践です.

% sudo cd . &&
brew uninstall rbenv ;     #rbenvのアンインストール
sudo rm -rf ~/.rbenv ;     #.rbenvファイルの削除
brew install rbenv ;       #Homebrewを用いてrbenvインストール
rbenv rehash ;             #rbenvリハッシュ
rbenv install 2.6.5 -v ;   #rbenv2.6.5インストール
rbenv global 2.6.5 ;       #環境全体のRubyバージョンを指定
rbenv rehash ;             #rbenvリハッシュ
gem install bundler ;      #bundlerインストール
rbenv rehash ;             #rbenvリハッシュ
gem install rails -v 6.0.0 ; #rails6.0.0インストール
rbenv rehash ;             #rbenvリ(以下略
rm -rf ~/.bundle/config ;  #configファイル削除
rm -rf .bundle/config ;    #同上
bundle config --global build.mysql2 --with-opt-dir="$(brew --prefix openssl)" ;   #OpenSSLにmysql2を格納??ちょとうまく説明できませんすみません・・・。

これを実行するとパソコンのパスワードが求められます。
それを打ち込むと処理が始まります。(結構長いです。)

終了後、% bundle install実行後に再度サーバーを立ち上げると、

解消されました!!

ローカル環境でもアプリは問題なく動いているようです。

考察

最後に% which bundlerで場所を確認してみると、

/Users/ユーザー名/.rbenv/shims/bundler

と、shimsというところに格納されているみたいですね。
ざっくりと考えると

rbenv<bundler<gem

といったように、gemを一元管理しているのがbundlerでさらにそれを管理しているのがrbenv(厳密にrbenvが管理しているのはrubyバージョン切り替えなど?)ということですかね。
bundlerとは何か、改めて調べるとこちらの記事が参考になりました。
【Rails】結局bundlerって何?bundlerの仕組みを図解形式で徹底解説

gemがおかしいならbundler入れ直すなどしてエラー解消に努めて、
bundlerがおかしいのであれば、最終手段としてrbenvを入れ直す。

そんな考え方もあるというのが今回大きな収穫になりました。
正直初学者の私にとってsudoコマンドはあまり使いたくないのですが・・・(笑)

ただ今回の件は私自身かなり勉強になりました。
本当にエラーは腹立つけど楽しいですね。

ここまでご覧いただいた方、ありがとうございました。
誰かの参考になれば幸いです。
3
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?