gem version 違い 動かない

時間がかかったエラーの対処への備忘録

 

 過去に作ったRailsアプリケーションを動かそうとしたら、動かなくなっちゃった!どうして?という人のエラーをみていたのですが、なんかよくわからない。全てのアプリが動かないのではなくて、特定のアプリだけ動かない。調べてもクリティカルな参考記事がない。

 

 どうもgemのバージョンが合わないとかそういうエラー文があるのだが、いくらbundle install しなおしても治らない。Gemfileとかへの記述は正しい。ローカルのGemのバージョンもおかしくない。なんだろう?

 

 https://310nae.com/error-mysql2/

 

 この人のエラーと同じだった。というか厳密には似ているという感じか。

 

 結論bundle install --path vendor/bundle  というbundle installのオプションが悪さする。

 

 もともとgemはPCのシステム直下にインストールされるんですが、アプリケーションのディレクトリにインストールすることもできるというのがこのオプションである。というのも、PCにどんどんgem追加するのが気持ち悪いとかの理由でこの機能がある。また、かつてはbundlerという機能がなかったのでgemのバージョン管理が簡単じゃなくて、そのためにアプリごとにgemをインストールするのが主流だったからこうなってたそうである。 詳しくは↓

 https://qiita.com/jnchito/items/99b1dbea1767a5095d85

 

 さて、今回のエラーはこの --path vendor/bundle というオプションをつけてgemインストールをしていたから起きたそうである。このオプションは一度使うと、それがデフォルトになるので、この人はRails newでアプリケーションを作るたびに、gemのインストール先がアプリのディレクトリ内に作られていたんです。

 

 最初にあげた参考サイトの方はMysql2のインストールができずオプションをつけて解消しようとしたができなかった。というのもこの方も同じく--path vendor/bundle のオプションをつけてアプリケーションを作成していて、アプリのGemにPATHの変更を加えたかったのに、Mysql2のオプションインストールがローカルにばかり行っていて、個別のアプリに変更が適用されなかったからうまくいかなかった的な感じなですね。たぶん。

 

 この--path vendor/bundle オプションをつけているとローカル環境にばかり変更を加えて、肝心のアプリに変更が加えられず、エラーが解消されないというお門違いな状況になってしまうんですね。なので、bundlerというgem管理機能ができた現在はこのオプションをつける意味はあまりないのでやめるべきなんですね。

 

 そのオプションの解除の方法はこちら↓

⑴ オプションによって作ってしまった vender/bundle のディレクトリの削除

⑵ローカルで「$ vim .bundle/config」を編集して BUNDLE_PATH: "vendor/bundle" この記述を消してしまう。

 これでアプリごとにGemを入れるディレクトリを作る設定がなくなります。

 

参考:

https://hi-algorithm.com/bundle-install-path-vendor-bundle/

https://qiita.com/yusaku_takiguchi/private/f9f56d727cfe77ccd4a8

 

 これは気づくのに時間がかかる。知らなきゃできないは。あ〜備忘備忘。