springの子プロセスが `BUNDLE_APP_CONFIG` を無視するバグがある

現象

docker-compose を使って、run bin/rake を実行した時に、Could not find rake が発生

(ローカル環境では正しく動作する)

$ docker-compose exec web bundle exec bin/rake --version
Could not find rake-12.3.0 in any of the sources
Run `bundle install` to install missing gems.

発生したバージョン

ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux-musl]
rake, version 12.3.0
Rails 5.1.4
gem 2.7.6
Bundler version 1.16.1

何故発生するのか?

ruby の docker image では 環境変数 BUNDLE_APP_CONFIG を設定している

  • 環境変数 BUNDLE_APP_CONFIG は、bundler の設定ファイルの場所を特定する環境変数
  • 未設定の場合は、./.bundle

以下のissueによると、springの子プロセスが bundler/setup を参照するときに、bundler が正しいconfigの場所を参照しなくなるとのこと

github.com

対策

  1. issue にあるように BUNDLE_APP_CONFIG を使わない
  2. springを使わない