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となるわけです。