gemコマンドでインストール時に
$ gem install nokogiri -- --use-system-libraries
というようにオプションを指定するとき、bundlerではどうやるのってなったので調べてみました
やり方
bundle install
をする前に
$ bundle config build.nokogiri --use-system-libraries
というコマンドを叩くと、~/.bundle/config
(プロジェクトルート下ではなくホームディレクトリであることに注意)という設定ファイルに以下の様な設定が追記されます。
---
BUNDLE_BUILD__NOKOGIRI: "--use-system-libraries"
次回以降bundle install
するときはそのオプションが適応されるようになります。
また、--local
オプションをつけることで、ホームディレクトリ下ではなくプロジェクト単位の設定ファイルに設定を付与することができるようです。(@msfukuiさん多謝!)
$ bundle config --local build.nokogiri --use-system-libraries
You are replacing the current local value of build.nokogiri, which is currently nil
Bundlerの設定の読み込み先と設定項目の確認
Bundlerの設定は
- Railsルート下の .bundle/config
- 環境変数
- ユーザのホームディレクトリ下の .bundle/config
の3箇所から読み込まれ、この順番に設定を探します。
設定したBundlerの項目は、bundle config
で確認することができます。
$ bundle config
Settings are listed in order of priority. The top value will be used.
build.nokogiri
Set for the current user (/home/vagrant/.bundle/config): "--use-system-libraries"
path
Set for your local app (/var/www/public/sample_app/.bundle/config): "vendor/bundle"
disable_shared_gems
Set for your local app (/var/www/public/sample_app/.bundle/config): "1"
どこの設定ファイルに書いてあるのか、ユーザーに紐付いているのかローカルアプリに紐付いているのかも書いていますね。
bundle install --path vendor/bundle
としたときの--path
の情報も書いてあるのがわかります。
また、Railsコンソールからも
Bundler.settings["設定項目"]
で確認できるようです。
$ rails c > Bundler.settings["build.nokogiri"] => "--use-system-libraries"