はじめに
Railsで開発している時、エラーを解決しようとガチャガチャやった後、bundle install
したらなぜかプロジェクト下の vender/bundle に gem がインストールされるようになってしまいました。とりあえず前の状態に戻したいと思い、原因と解決法を探りました。
bundle install --path vender/bundle
調べてみると、むしろbundle install --path vender/bundle
を推奨する記事が散見されましたが、下記の記事のようにこの慣習に疑問を呈している記事もありました。
bundle install時に--path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう
デフォルトに戻す
ググると以下のような方法をすぐに見つけました。
Bundlerがどこからgemを探すかは、プロジェクトルートの下の.bundle/configに設定ファイルがあります。これを消すことで、新たな場所にbundle installできるようになります。
しかし、私の場合この方法では症状解決しませんでした。
そこで、もう一度bundle install
しプロジェクト下に作成された .bundle/config ファイルを確認しました。
---
BUNDLE_WITHOUT: "production"
…特にpath
オプションに関連するものはありませんでした。
そこでbundler config
でどのようなオプションが設定されているかを確認しました。
$ bundler config
Settings are listed in order of priority. The top value will be used.
without
Settings are listed in order of priority. The top value will be used.
path
Set for the current user (/Users/punkshiraishi/.bundle/config): "vendor/bundle"
これで path オプションが /Users/[ユーザ名]/.bundle/config で設定されていることが分かったので開いてみると
---
BUNDLE_WITHOUT: "production"
BUNDLE_PATH: vendor/bundle
ありました!
このBUNDLE_PATH: vendor/bundle
を削除し、bundle install
することで、使用中の Ruby 直下に gem がインストールされるようになりました!
更に調べてみると bundler のオプションは
- Railsプロジェクト下の .bundle/config
- 環境変数
- ユーザのホームディレクトリ下の .bundle/config
の3つにあるということが分かりました。プロジェクト直下の .bundle/config を削除しても設定が戻らないという方は上記も調べてみると良いかもしれません。