bundler は Gemfile の場所等を環境変数にセットする。これにより、同じプロジェクト内の Ruby プログラムを起動するときは bundler について考える必要なく system
等が使える。
しかし他の bundler で管理されているプロジェクトの Ruby プログラムを起動する場合、そちらの Gemfile を参照しなければならない。このような状況を解決するために Bundler.with_clean_env
というメソッドが用意されている。
Bundler.with_clean_env do
system 'cd /path/to/other/project; bundle exec bin/foo.rb'
end
また、system
や exec
用に Bundler.clean_system
, Bundler.clean_exec
というヘルパメソッドも用意されている。
bundle exec
時の環境変数の変更については bundle-exec の man に書かれている。
http://bundler.io/v1.3/man/bundle-exec.1.html
このことを知らないと、Gemfile に書かれている gem の require になぜか失敗する、という挙動に悩まされることになる…