2010-02-07 136 views
1

我想在構建期間讓CruiseControl.rb運行rcov。它目前已使用以下錯誤而失敗:CruiseControl.rb PATH

sh: rcov: not found 

因爲我可以運行,當我登錄外殼rcov了,我覺得這是一個路徑問題。 (另外,我可以在沒有錯誤的情況下運行rake test:rcovrake cruise)。我添加了一個p 'echo $PATH'聲明(用正確的反引號來執行命令;由於降價)我cruise.rake,發現道路確實是不正確的:

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

的rcov可執行文件位於/ var/lib中/寶石/1.8/bin/rcov,所以難怪CC.rb找不到它。

但是,我無法弄清楚如何正確設置路徑。我有這一套在我的.profile文件的底部:

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

這是什麼使得它交互工作,但它沒有被CC回升。

我在Passenger Phusion(並因此在apache下)運行CruiseControl.rb。我檢查了儘可能多的文件,但我沒有看到任何路徑。

我可以在哪裏設置路徑和/或確定路徑設置的位置?

回答

1

首先,你的.profile是錯誤的。在其他進程可見之前,您需要導出環境變量。像這樣:

export PATH=.... 

PATH=... 
export PATH 

非出口環境變量值只能從同一外殼內的過程訪問。

但是這不是你的問題,因爲你運行Phusion Passenger。 .profile只能被shell讀取,並且由於Apache不是從shell啓動的,而是從系統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> 
+0

所有權利看起來像它應該工作......但由於某種原因,它不。 – 2010-02-20 19:31:56

+0

說明:爲CC /乘客正確設置路徑。但是,在調用構建器時,不會使用此路徑。 – 2010-02-20 20:35:26

0

我終於得到了一切正常。首先,@ Hongli關於在Apache中設置PATH的建議是正確的; SetEnv能夠爲基於Passenger的網站設置PATH。

在挖掘了CruiseControl.rb代碼後,我發現了第二個問題(我在給Hongli的回答中提到了這個問題)。在啓動過程中,CC.rb會爲每個項目分配一個構建器進程。每個進程在創建時都會獲得其父級的路徑。我的問題是我重新啓動了Apache,但這並不是因爲任何原因重新啓動構建器進程。因此,構建者沒有得到我的PATH更新,所以似乎沒有從Apache獲得PATH。這導致我相信他們的PATH被設置在其他地方 - 但事實並非如此。

重新啓動系統並沒有竅門;新的建設者從Apache獲得了新的PATH,現在一切都按預期工作。可能有其他一些方法來重新啓動建設者,但我沒有調查過。