3

編集

元の問題を解決することができました。

以下で説明するように、rspec 内から rails runner を実行する際に問題がありました。おそらく関連性があると今気づいた詳細は、私のrspecテストがRailsを含まないまったく別のプロジェクトにあるということです。

問題は、環境変数がプロジェクト、つまりRailsを含まないgemのBUNDLE_GEMFILEセットを指すように設定されていたことであることが判明しました。rspec次のように設定します。

ENV['BUNDLE_GEMFILE'] = nil

私のコマンドを呼び出す前に、systemすべてが生き返りました。

元の質問:

次のコマンドは、端末から機能します。

ruby <path to rails app>/script/rails runner <cmd>

ただし、Ruby スクリプト (rspec) 内から同じコマンドを実行しようとしても失敗し、次のようになります。

<path>/script/rails:6:in `require': cannot load such file -- rails/commands (LoadError)

これはコマンドです:

system("ruby <path to rails app>/script/rails runner <cmd>")

これはターミナル(bash)とRubyのシステムコマンドの環境が違うためだと思います。ruby スクリプトで同じ環境を使用する方法はありますか?

編集

以下の@Eternal-Learnerの回答に従って環境を設定しようとしましたが、エラーに違いはありませんでした。おそらくそれは問題が環境ではないことを示していますが、そうでない場合は何が原因でしょうか?

編集2:

これはrspecの問題のようです。rspecの例ではなく、通常のrubyスクリプトでコマンドを実行してみましたが、ビンゴです!...すべてが機能します。

では、なぜ rspec で実行していることが重要なのですか? systemコマンドを実行すると、Ruby インタープリターの新しいインスタンスが開始されるので、rspec 環境の外で開始されると予想していました。Ruby インタープリターの異なるインスタンス間にある種の Ruby グローバルがあるのでしょうか、それともシステムが新しい Ruby 環境を作成しないのでしょうか?

4

2 に答える 2

1

試す

system("cd <path to rails app> && ruby script/rails runner <cmd>")  

の値と関係があるかどうかを確認するにはCWD

于 2013-10-30T13:25:44.330 に答える