LoginSignup
1
1

More than 3 years have passed since last update.

bundle installの度に"BUNDLE_WITHOUT"が追加されて開発環境だけで使用したいgemがインストールできない

Posted at

本番環境でのgemのインストールで少しハマったので備忘録として記録

これまでローカル環境でgemのインストールをする際に、development環境やtest環境のgemのインストールがなぜかうまくいかないという問題が発生していました。
本番環境では開発環境で使用するrubocopなどのgemってそもそもインストールする必要がないよなと思い、ローカル環境から一度立ち戻って確認してみることに。

ハマった点

1. 下記のようにGemfile内に記載されているgroup developmenttest内のgemのインストールがうまくいかない。


group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'pry-rails'
  gem 'pry-doc'
  gem 'pry-byebug'
  gem 'pry-stack_explorer'
  gem 'pry-alias'
  gem 'rb-readline'
  # コーディング規約
  gem 'rubocop', require: false
  gem 'rubocop-performance', require: false
  gem 'rubocop-rails', require: false
end

group :test do
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  gem 'webdrivers'
end

2. project内の.bundle/config内の下記記述が削除しても、bundle installの度に追加されてしまう。

---
BUNDLE_PATH: "vendor/bundle"
BUNDLE_WITHOUT: "development:test"

原因調査

bundle configを実行することで、bundleの設定を確認することができます。
bundlerでは一度実行したオプションは保存されて、2度目以降の実行では自動でオプションを付加した状態で実行されているようです。

mbp13:sample_app user$ bundle config
Settings are listed in order of priority. The top value will be used.
path
Set for your local app (/Users/user/development/ams_app/.bundle/config): "vendor/bundle"
Set for the current user (/Users/user/.bundle/config): "vendor/bundle"

without
Set for your local app (/Users/user/dev/sample_app/.bundle/config): [:development, :test]
Set for the current user (/Users/user/.bundle/config): [:development, :test]

どうやらアプリ固有のbundle設定でも、ユーザ単位のbundle設定でもbundle install実行時にdevelopment環境やtest環境のどちらのgemもインストールしない設定となっているようですね。

解決方法

下記の2つのファイルからBUNDLE_WITHOUT: "development:test"の削除を行う。
/Users/user/dev/sample_app/.bundle/config
/Users/user/.bundle/config

※もちろん、PATHに含まれるuser,sample_appで表される「ユーザ名」、「アプリ名」についてはそれぞれの環境のものであると思います。

削除が完了したら、再度bundle configコマンドを実行して先ほどのbundleオプションの記述が消えていることを確認してください。

mbp13:sample_app user$ bundle config
Settings are listed in order of priority. The top value will be used.
path
Set for your local app (/Users/user/dev/sample_app/.bundle/config): "vendor/bundle"
Set for the current user (/Users/user/.bundle/config): "vendor/bundle"

ここまできたらこれまで同様にbundle installをしていただければ開発環境で使用したいgemがインストールできるかと思います。
bundle install実行後もこれまでとは異なり、BUNDLE_WITHOUT: "development:test"がconfingファイルに追加されることはありません。(bundle configで確認できます。)
本来アプリ単位でgemの管理を行うためのbundlerですが、より優先度の高いユーザのbundle configで常にdevelopmenttestのgemはインストールしないという設定がされてしまっていたということですかね。

最後に

勉強し始めで色々なチュートリアルなどをする中で、コマンド実行してしまったんですかね。
初学者あるあるかと思いますが、コマンドを打つ前にコマンドの意味をちゃんと調べるのは大切ですね。最初に見つけたドキュメントに飛びついてとりあえずコマンドを打つのも後々苦しむことになったりすることもまた一つ勉強になりました。

本番環境ではBUNDLE_WITHOUTの設定を用いて、開発で使用していたgemをインストールしない設定にしておくのが本来の使い方何ですかね。

ご指摘などありましたらコメントよりよろしくお願いします。

1
1
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
1
1