2010-02-07 138 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,现在一切都按预期工作。可能有其他一些方法来重新启动建设者,但我没有调查过。