1

我试图让 CruiseControl.rb 在构建期间运行 rcov。它目前因以下错误而失败:

sh: rcov: not found 

由于我可以rcov在登录时从 shell 运行,我认为这是一个 PATH 问题。(此外,我可以同时运行rake test:rcovrake cruise从 shell 运行而不会出错)。我在我的 Cruise.rake 中添加了一条p 'echo $PATH'语句(使用正确的反引号来执行命令;感谢 Markdown),发现路径确实不正确:

"/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 接收。

我在Passenger Phusion 下运行CruiseControl.rb(因此在apache 下)。我检查了我能想到的尽可能多的文件,但对我来说没有什么像 PATH 的。

我可以在哪里设置路径和/或确定路径的设置位置?

4

2 回答 2

1

首先,您的 .profile 是错误的。您需要先导出环境变量,然后它才能对其他进程可见。像这样:

export PATH=....

或者

PATH=...
export PATH

非导出的环境变量值只能从同一个 shell 进程中访问。

但这不是您的问题,因为您正在运行 Phusion Passenger。.profile 仅由 shell 读取,并且由于 Apache 不是从 shell 启动的,而是从系统初始化进程启动的,因此您在 .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

我终于让一切正常了。

首先,@Hongli 关于在 Apache 中设置 PATH 的建议是正确的;SetEnv 能够为基于乘客的站点设置 PATH。

在浏览了 CruiseControl.rb 代码后,我发现了第二个问题(我在评论中提到了宏利的答案)。在启动期间,CC.rb 为每个项目创建一个构建器进程。每个进程在创建时都获得其父进程的 PATH 。我的问题是我正在重新启动 Apache,但无论出于何种原因,这都没有重新启动构建器进程。因此,构建者没有获得我的 PATH 更新,因此似乎没有从 Apache 获得 PATH。这让我相信他们的 PATH 设置在其他地方——但事实并非如此。

重新启动系统就可以了。新的建设者从 Apache 获得了新的 PATH,现在一切都按预期工作。可能还有其他方法可以重新启动构建器,但我没有对此进行调查。

于 2010-02-20T22:41:13.173 回答