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