Bashから別階層のRubyプログラムを呼んだらBundlerがGemfileを読めない
2015 年 2 月 12 日 by 山平最近…でもないですが、Ruby界隈ではBundlerを使って環境を保証するのがトレンドのようです。
私の場合、その場限りの書き捨てツールを書くことが多いので馴染みがあまりありません。
しかし、世の流れには従うべきかと思っていた時期に少しだけ使ったことがあります。
これがいけなかった。
先日とあるバッチプログラムを作成した際、bundlerを利用したrubyプログラムを呼び出して利用しようとしたのですが、うまく動きません。
$ ./fuga.sh Could not locate Gemfile $
- fuga.shは、別の階層にあるhoge.rbを呼び出しています。
- hoge.rbは単体では正しく動くのが確認できています。
- rubyプログラム内のrequireで失敗しているようです
BundlerがGemfileを読めていないと踏んで情報を探してみるのですが、Ruby=>Rubyでの情報が見つかるばかり。。。
仕方がないので見つけた情報を元にアタリをつけながら試行錯誤した結果が以下になります。
ruby_program=../../hoge/hoge.rb gem_bk=$BUNDLE_GEMFILE export BUNDLE_GEMFILE="../../hoge/Gemfile" bundle exec ruby $ruby_program export BUNDLE_GEMFILE=$gem_bk
Bundlerは環境変数BUNDLE_GEMFILEを元にGemfileを探すので、それを書き換えて目的のRubyプログラムを実行、終わったらバックアップから書き戻す、ということを行なっています。
以上です。