Bundler の設定
最終更新日 2018年02月08日(木)
Table of Contents
bundle config
コマンドを使用して、Bundler をローカルで設定できます。このコマンドでは、グローバルオプションまたはローカルオプションを .bundle/config
ファイルで設定できます。この .bundle/config
ファイルには、システムごとに異なる可能性があるローカルパスが含まれているため、このファイルをソース管理にチェックインしないことをお勧めします。代わりに、Heroku では環境変数を使用して Bundler を設定することをお勧めします。
環境変数の動作
bundle install
に引数として渡すほとんどの設定は、環境変数を使用して設定できます。たとえば、bundle install --without development:test:ci
の代わりに、BUNDLE_
接頭辞の付いた環境変数を使用して Bundler を設定できます。--without
フラグの場合、これは次のようになります。
$ heroku config:set BUNDLE_WITHOUT=development:test:ci
gem ソースのユーザー名とパスワード
パスワードで保護されている gem ソースについては、特別に作られた環境変数を使用してユーザー名とパスワードを設定できます。たとえば、contribsys.com
上のセキュアな gem サーバーに接続しようとしている場合、以前は次の内容を Gemfile に追加していました。
gem "mygem", source: "https://#{ ENV['CONTRIBSYS_USERNAME_PASSWORD'] }@gems.contribsys.com"
代わりに、ユーザー名とパスワードなしでソースを宣言できるようになりました。
gem "mygem", source: "https://gems.contribsys.com"
次に、config でユーザー名とパスワードを設定できます。
$ heroku config:set BUNDLE_GEMS__CONTRIBSYS__COM=<username:password>
環境変数は、必要なソースのドメイン名に基づいて設定する必要があります。環境変数ではピリオドが無効なため、二重のアンダースコア __
を使用してピリオドを示すことができます。
環境変数の書式は、bundle config
をローカルで実行し、その環境変数を使用することによって検証できます。
$ env BUNDLE_GEMS__CONTRIBSYS__COM=<username:password> bundle config
gems.contribsys.com
Set via BUNDLE_GEMS__CONTRIBSYS__COM: "<username:password>"
username
と password
は実際の値に置き換える必要があります。間にコロンを入れるのを忘れないでください。
もう 1 つの例では、https://gem.fury.io
を使用します。Bundler の環境変数に相当するのは BUNDLE_GEM__FURY__IO
です。
これが機能していることを確認するために、保護された gem をローカルにインストールできます。まず、ローカルで gem をアンインストールします。たとえば、Gemfile で sidekiq を使用している場合、次のようになります。
gem "sidekiq-pro", source: "https://gems.contribsys.com/"
すでにインストールされている gem をローカルマシンから削除する必要があります。
$ gem uninstall sidekiq-pro
次に、再インストールが正しく機能することを確認します。
$ BUNDLE_GEMS__CONTRIBSYS__COM=<username:password> bundle install
再インストールがローカルで失敗した場合、Heroku でも失敗します。
Heroku へのデプロイ中、次のようなエラーメッセージが表示されることがあります。
Authentication is required for https://gems.contribsys.com/.
Please supply credentials for this source.
その場合は、上記の手順を使用して、インストールがローカルで機能することを確認します。
gem のビルド設定
ネイティブ拡張機能を持つ一部の gem については、インストール時に追加のフラグを gem に直接指定することが必要な場合があります。
たとえば、設定オプションを検索する場所を mysql
gem に指示する必要があります。gem install
でこの gem をシステムにインストールする場合、次のように --with-mysql-config
フラグを指定してコマンドを実行する必要があります。
$ gem install mysql -- --with-mysql-config=<path/to/mysql_config>
Bundler では、ビルド設定を通じてこれらのフラグを渡すことをサポートしています。キーは build.<name-of-gem>
です。mysql の場合は build.mysql
です。環境変数のバージョンは BUNDLE_BUILD__MYSQL
になります。Heroku では、次のようにしてこの値を設定できます。
$ heroku config:set BUNDLE_BUILD__MYSQL=<path/to/mysql_config>
Heroku には mysql がインストールされていないため、この例で指定しているパスは有効ではありません。 mysql をインストールする buildpack が必要であり、適切な config の場所を指すようにこの環境変数を設定できます。
gem ソースの場合と同様に、ローカルで bundle config
を使用して環境変数の書式をチェックすることができます。
$ env BUNDLE_BUILD__MYSQL="--with-mysql-config=<path/to/mysql_config>" bundle config
# ...
build.mysql
Set via BUNDLE_BUILD__MYSQL: "--with-mysql-config=<path/to/mysql_config>"