CruiseControl.rb PATH - PullRequest
       54

CruiseControl.rb PATH

1 голос
/ 07 февраля 2010

Я пытаюсь заставить 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 под Passenger Phusion (и, следовательно, под apache). Я проверил столько файлов, сколько смогу придумать, но для меня ничто не выглядит как ПУТЬ.

Где я могу установить путь и / или определить, где путь устанавливается?

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

Прежде всего, ваш .profile неверен. Вам необходимо экспортировать переменную среды, прежде чем она станет видимой для других процессов. Как это:

export PATH=....

или

PATH=...
export PATH

Неэкспортированные значения переменных среды доступны только из одного и того же процесса оболочки.

Но это не ваша проблема, так как вы используете Phusion Passenger. .profile читается только оболочкой, и поскольку Apache запускается не из оболочки, а из процесса инициализации системы, все, что вы вставляете в .profile, игнорируется. Для Phusion Passenger вы должны установить свой PATH с помощью mod_env и директивы SetEnv, например:

<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 голосов
/ 21 февраля 2010

Я наконец все заработал.

Во-первых, совет @ Hongli о настройке PATH в Apache был верным; SetEnv смог установить PATH для сайта на основе пассажиров.

После копания в коде CruiseControl.rb я обнаружил вторичную проблему (на которую я ссылался в своих комментариях к ответу Хонгли). Во время запуска CC.rb разветвляется для каждого проекта. Каждый процесс получает ПУТЬ своего родителя во время его создания . Моя проблема заключалась в том, что я перезапускал Apache, но это не перезапускало процессы компоновщика по какой-либо причине. Таким образом, сборщики не получали обновления PATH и, следовательно, не получали PATH от Apache. Это заставило меня поверить, что их PATH были установлены где-то еще, но это не так.

Перезагрузка системы сделала свое дело; Новые сборщики получили новый PATH от Apache, и теперь все работает как положено. Возможно, есть какой-то другой способ перезапустить строителей, но я не исследовал это.

...