CruiseControl.rb PATH
-
19-09-2019 - |
Pergunta
Eu estou tentando obter CruiseControl.rb para rcov prazo durante uma compilação. É atualmente a falhar com o seguinte erro:
sh: rcov: not found
Uma vez que eu posso correr rcov
do shell quando eu entrar, eu figura que este é um problema PATH. (Além disso, eu posso correr tanto rake test:rcov
e rake cruise
do shell sem erros). Eu adicionei uma declaração p 'echo $PATH'
(com os acentos graves corretas para executar o comando, graças Markdown) para o meu cruise.rake e descobriu que o caminho era realmente incorreta:
"/usr/local/bin:/usr/bin:/bin\n"
O executável rcov está em /var/lib/gems/1.8/bin/rcov, por isso não é de admirar que CC.rb não pode encontrá-lo.
No entanto, não posso descobrir como definir o caminho corretamente. Eu tenho este conjunto no fundo do meu profile:
PATH="$PATH:/var/lib/gems/1.8/bin/"
Isto é o que faz com que funcione de forma interactiva, mas ele não está sendo captado pelo CC.
Estou correndo CruiseControl.rb sob Passageiros Phusion (e, portanto, sob o Apache). Eu verifiquei tantos arquivos como eu posso pensar, mas nada se parece com um caminho para mim.
Onde posso definir o caminho e / ou determinar onde o caminho está sendo definido?
Solução
Em primeiro lugar, o seu .profile é errado. Você precisa exportar a variável de ambiente antes que seja visível para outros processos. Como esta:
export PATH=....
ou
PATH=...
export PATH
Os valores das variáveis ??de ambiente Não-exportados só pode ser acessado de dentro do mesmo processo shell.
Mas isso não é o seu problema, uma vez que você está executando Phusion Passenger. .profile só é lido pelo shell, e desde Apache não é iniciado a partir do shell, mas a partir do processo de inicialização do sistema, o que você colocar em .profile é ignorado. Para Phusion Passenger você tem que definir o seu caminho com mod_env ea directiva SetEnv, como este:
<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>
Outras dicas
Eu finalmente consegui tudo funcionando.
Em primeiro lugar, @ conselho de Hongli sobre a definição do PATH dentro Apache estava correta; SetEnv foi capaz de definir o caminho para o site baseado passageiros.
Depois de cavar em torno através do código CruiseControl.rb eu descobri o problema secundário (ao qual me referi em meus comentários para a resposta de Hongli). Durante a inicialização, CC.rb bifurca um processo construtor para cada projeto. Cada processo obtém o caminho de seu pai no momento em que foi criado . Meu problema era que eu estava reiniciar Apache, mas isso não foi reiniciar os processos do construtor por qualquer motivo. Os construtores, portanto, não chegar em minhas atualizações PATH, e assim parecia não obter o caminho do Apache. Isso me levou a acreditar que seus caminhos foram criados em outro lugar -. Mas esse não é o caso
A reinicialização do sistema fez o truque; os novos construtores tem o novo caminho do Apache e agora tudo funciona como esperado. Provavelmente há alguma outra maneira de reiniciar os construtores, mas eu não investiguei isso.