Вопрос

Я пытаюсь заставить CruiseControl.rb запускать rcov во время сборки.В настоящее время он завершается сбоем со следующей ошибкой:

sh: rcov: not found 

С тех пор, как я могу бегать rcov из командной строки, когда я вхожу в систему, я понимаю, что это проблема с ПУТЕМ.(Кроме того, я могу запустить оба rake test:rcov и rake cruise из оболочки без ошибок).Я добавил 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 его не улавливает.

Я запускаю CruiseControl.rb под управлением Passenger Phusion (и, следовательно, под apache).Я проверил столько файлов, сколько смог придумать, но мне ничего не кажется похожим на ПУТЬ.

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

Это было полезно?

Решение

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

export PATH=....

или

PATH=...
export PATH

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

Но это не ваша проблема, поскольку вы управляете Phusion Passenger..profile считывается только командной оболочкой, и поскольку Apache запускается не из командной оболочки, а из процесса инициализации системы, все, что вы вводите в .profile, игнорируется.Для Phusion Passenger вы должны задать свой ПУТЬ с помощью 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>

Другие советы

Наконец-то у меня все заработало.

Во-первых, совет @Hongli по настройке ПУТИ в Apache был правильным;SetEnv смог задать ПУТЬ для сайта, основанного на пассажирах.

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

Перезагрузка системы сделала свое дело;новые разработчики получили новый ПУТЬ от Apache, и теперь все работает так, как ожидалось.Вероятно, есть какой-то другой способ перезапустить builders, но я его не исследовал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top