1

ビルド中にCruiseControl.rbにrcovを実行させようとしています。現在、次のエラーで失敗しています。

sh: rcov: not found 

ログインするとシェルから実行できるのでrcov、これはPATHの問題だと思います。(さらに、エラーなしでシェルrake test:rcovとシェルの両方を実行できます)。rake cruise私はp 'echo $PATH'(コマンドを実行するための正しいバッククォートを使用して、Markdownに感謝します)ステートメントをcruise.rakeに追加し、パスが実際に正しくないことを発見しました。

"/usr/local/bin:/usr/bin:/bin\n"

rcov実行可能ファイルは/var/lib/gems/1.8/bin/rcovにあるため、CC.rbがそれを見つけられないのも不思議ではありません。

しかし、パスを正しく設定する方法がわかりません。.profileの下部に次のセットがあります。

PATH="$PATH:/var/lib/gems/1.8/bin/"

これがインタラクティブに機能する理由ですが、CCによって取得されていません。

私はCruiseControl.rbをPassengerPhusionの下で(したがってapacheの下で)実行しています。考えられる限り多くのファイルをチェックしましたが、私にはPATHのようには見えません。

パスをどこに設定したり、パスが設定されている場所を特定したりできますか?

4

2 に答える 2

1

まず、.profile が間違っています。他のプロセスに表示される前に、環境変数をエクスポートする必要があります。このような:

export PATH=....

また

PATH=...
export PATH

エクスポートされていない環境変数の値には、同じシェル プロセス内からのみアクセスできます。

しかし、Phusion Passenger を実行しているので、それは問題ではありません。.profile はシェルによってのみ読み取られます。Apache はシェルからではなく、システムの init プロセスから開始されるため、.profile に入力した内容は無視されます。Phusion Passenger の場合、次のように mod_env と SetEnv ディレクティブを使用して PATH を設定する必要があります。

<VirtualHost *:80>
    ServerName something.test
    DocumentRoot /somewhere/to/cruisecontrol/public
    SetEnv PATH /usr/bin:/usr/local/bin:/bin:/var/lib/gems/1.8/bin    # <---- add this
</VirtualHost>
于 2010-02-16T15:53:17.467 に答える
0

ついにすべてが機能するようになりました。

まず、Apache 内で PATH を設定することに関する @Hongli のアドバイスは正しかったです。SetEnv は、Passenger ベースのサイトの PATH を設定できました。

CruiseControl.rbコードを掘り下げた後、二次的な問題を発見しました(Hongliの回答へのコメントで言及しました)。起動時に、CC.rb は各プロジェクトのビルダー プロセスを fork します。各プロセスは、作成時にその親の PATH を取得します。私の問題は、Apache を再起動していたことですが、何らかの理由でビルダー プロセスを再起動していませんでした。したがって、ビルダーは私の PATH の更新を取得していないため、Apache から PATH を取得していないように見えました。そのため、彼らの PATH は別の場所に設定されていると思いましたが、そうではありません。

システムを再起動するとうまくいきました。新しいビルダーは Apache から新しい PATH を取得し、すべてが期待どおりに機能するようになりました。おそらくビルダーを再起動する別の方法があると思いますが、私はそれを調査していません。

于 2010-02-20T22:41:13.173 に答える