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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top