CruiseControl.rb PATH
我想在构建期间让CruiseControl.rb运行rcov。它目前已使用以下错误而失败:CruiseControl.rb PATH
sh: rcov: not found
因为我可以运行,当我登录外壳rcov
了,我觉得这是一个路径问题。 (另外,我可以在没有错误的情况下运行rake test:rcov
和rake 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。我检查了尽可能多的文件,但我没有看到任何路径。
我可以在哪里设置路径和/或确定路径设置的位置?
回答:
首先,你的.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>
回答:
我终于得到了一切正常。首先,@ Hongli关于在Apache中设置PATH的建议是正确的; SetEnv能够为基于Passenger的网站设置PATH。
在挖掘了CruiseControl.rb代码后,我发现了第二个问题(我在给Hongli的回答中提到了这个问题)。在启动过程中,CC.rb会为每个项目分配一个构建器进程。每个进程在创建时都会获得其父级的路径。我的问题是我重新启动了Apache,但这并不是因为任何原因重新启动构建器进程。因此,构建者没有得到我的PATH更新,所以似乎没有从Apache获得PATH。这导致我相信他们的PATH被设置在其他地方 - 但事实并非如此。
重新启动系统并没有窍门;新的建设者从Apache获得了新的PATH,现在一切都按预期工作。可能有其他一些方法来重新启动建设者,但我没有调查过。
以上是 CruiseControl.rb PATH 的全部内容, 来源链接: utcz.com/qa/259312.html