Pregunta

Estoy intentando conseguir CruiseControl.rb para funcionar rcov durante una generación. Está actualmente en su defecto con el siguiente error:

sh: rcov: not found 

Desde puedo correr rcov de la cáscara al iniciar sesión, Calculo que este es un problema PATH. (Además, se puede ejecutar tanto rake test:rcov y rake cruise de la cáscara sin errores). He añadido una declaración p 'echo $PATH' (con los acentos abiertos correcta para ejecutar el comando, gracias Markdown) a mi cruise.rake y descubrí que el camino era de hecho incorrecto:

"/usr/local/bin:/usr/bin:/bin\n"

El ejecutable rcov está en /var/lib/gems/1.8/bin/rcov, así que no es de extrañar que CC.rb no puede encontrarlo.

Sin embargo, no puedo encontrar la manera de establecer la ruta correctamente. Tengo este conjunto en la parte inferior de mi .profile:

PATH="$PATH:/var/lib/gems/1.8/bin/"

Esto es lo que hace que funcione de forma interactiva, pero que no está siendo recogido por CC.

Estoy corriendo bajo CruiseControl.rb Phusion de pasajeros (y por lo tanto bajo Apache). He comprobado todos los archivos que se me ocurre, pero nada se ve como un camino para mí.

¿Dónde puedo establecer la ruta y / o determinar dónde se está creando el camino?

¿Fue útil?

Solución

En primer lugar, su .profile es erróneo. Es necesario exportar la variable de entorno antes de que sea visible para otros procesos. De esta manera:

export PATH=....

o

PATH=...
export PATH

valores de las variables de no exportado medio ambiente sólo se puede acceder desde dentro del mismo proceso shell.

Pero eso no es su problema, ya que se está ejecutando Phusion pasajeros. .profile sólo es leído por la cáscara, y desde Apache no se inicia desde el shell, pero desde el proceso init del sistema, lo que pones en .profile se ignora. Para Phusion pasajero tiene que configurar su trayectoria con mod_env y la directiva SetEnv, como esto:

<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>

Otros consejos

Finalmente llegué todo funcionando.

En primer lugar, el consejo de @ Hongli sobre la configuración de la ruta dentro de Apache era correcta; SetEnv era capaz de establecer la ruta para el sitio basado en pasajeros.

Después de cavar en torno a través del código CruiseControl.rb descubrí el problema secundario (a la que he aludido en mis comentarios a la respuesta de Hongli). Durante el inicio, horquillas CC.rb un proceso constructor para cada proyecto. Cada proceso obtiene el PATH de su matriz en el momento en que fue creado . Mi problema era que yo estaba reiniciando Apache, pero esto no estaba reiniciando los procesos constructor por cualquier razón. Los constructores de este modo no se llevaban mis actualizaciones PATH, y así no parecían obtener la ruta de Apache. Eso me llevó a creer que sus caminos se establecieron en otro lugar -. Pero esto no es el caso

Al reiniciar el sistema hizo el truco; los nuevos constructores consiguieron la nueva ruta en Apache y ahora todo funciona como se espera. Es probable que haya alguna otra forma de reiniciar los constructores, pero no han investigado eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top