ПУТЬ CruiseControl.rb
-
19-09-2019 - |
Вопрос
Я пытаюсь заставить 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, но я его не исследовал.