おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

bundle install で、gem install のオプションを指定する方法

Rails3からgemパッケージの管理はBundlerで行うようになっています。
Bundlerはとても便利なのですが、個別のgemパッケージのインストール時にオプションを渡す方法がわからなくて、ちょっと苦労してしまいました。
今よく読んでみるとドキュメントにちゃんと書いてあったので、やっぱりドキュメントはちゃんと読んだほうがいいですね(ソースをずっと読んでました)。
以下に経緯と解決法を書いておきます。

古いバージョンのRMagickをBundlerを使ってインストールしようとしたのですが、permission errorが発生してしまいました。

Permission denied - /usr/local/ruby/share/RMagick  

上記のディレクトリにドキュメントをコピーしようとしているのですが、ローカルユーザはそのディレクトリへの書き込み権限がありません。
ドキュメントなんて特にいらないので、gem install するときなら、

sudo gem install rmagick -- --disable-htmldoc  

とするだけなのですが、Bundlerでこのオプションを指定するには、

bundle config build.rmgick --disable-htmldoc  

と指定した後に、bundle install を実行します。
デプロイのことやチームで開発している場合は、Railsルートの下の.bundle/config に以下の行を追加してあげるといいでしょう。

BUNDLE_BUILD__RMAGICK: --disable-htmldoc  

Bundlerの各設定値は、Bundler.settingsで取得することができます。上記のRMagickの設定は

$ rails c  
> Bundler.settings["build.rmagick"]  
=> "--disable-htmldoc"  

というように、build.rmagickというキーに設定されています。
Bundler.settingsの設定内容はどこに保持されているかというと、

 1. Railsルート下の .bundle/config
 2. 環境変数
 3. ユーザのホームディレクトリ下の .bundle/config

のいずれかです。上記の順番にキーを探して、見つかったものが採用されます。
設定ファイル内でのキーは以下のようなルールになります。

 1. 頭に “BUNDLE_” をつける
 2. “.” は “__” に変換する (アンダーバーが2つであることに注意)

なので、build.rmagickは、BUNDLE_BUILD__RMAGICKとなるわけです。