Question

Je suis en train de se CruiseControl.rb à courir rcov lors d'une construction. Il est actuellement défaut avec l'erreur suivante:

sh: rcov: not found 

Depuis que je peux courir rcov à partir du shell lorsque je me connecte, je dis que cela est un problème de PATH. (De plus, je peux courir à la fois rake test:rcov et rake cruise de la coquille sans erreur). J'ai ajouté une déclaration de p 'echo $PATH' (avec les guillemets obliques corrects pour exécuter la commande, grâce Markdown) à mon cruise.rake et a découvert que le chemin était en effet incorrect:

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

L'exécutable rcov est à /var/lib/gems/1.8/bin/rcov, il est donc pas étonnant que CC.rb ne peut pas le trouver.

Cependant, je ne peux pas comprendre comment définir le chemin correctement. J'ai cet ensemble au fond de mon .profile:

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

est ce qui fonctionne de manière interactive, mais il est pas repris par CC.

Je suis en CruiseControl.rb sous passagers Phusion (et donc sous apache). J'ai vérifié autant de fichiers que je peux penser, mais rien ne ressemble à un chemin vers moi.

Où puis-je définir le chemin et / ou déterminer le chemin est en cours d'?

Était-ce utile?

La solution

Tout d'abord, votre .profile est erroné. Vous devez exporter la variable d'environnement avant qu'il ne soit visible à d'autres processus. Comme ceci:

export PATH=....

ou

PATH=...
export PATH

Les valeurs des variables d'environnement non exportées ne sont accessibles à partir du même processus shell.

Mais ce n'est pas votre problème puisque vous utilisez des passagers Phusion. .profile est seulement lu par le shell, et depuis Apache ne démarre pas à partir du shell, mais du processus d'initialisation du système, tout ce que vous mettez dans .profile est ignoré. Pour Phusion passagers, vous devez définir votre chemin avec mod_env et la directive SetEnv, comme ceci:

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

Autres conseils

J'ai finalement eu tout fonctionne.

Tout d'abord, @ conseils de Hongli sur la définition du chemin à l'intérieur d'Apache était correcte; SetEnv a pu définir le PATH pour le site en fonction des passagers.

Après avoir creusé autour à travers le code CruiseControl.rb j'ai découvert le problème secondaire (auquel je faisais allusion dans mes commentaires à la réponse de Hongli). Lors du démarrage, fourches CC.rb un processus de constructeur pour chaque projet. Chaque processus obtient le chemin de son parent au moment où il a été créé . Mon problème est que je redémarrait Apache, mais cela n'a pas été remise en route les processus de constructeur pour une raison quelconque. Les constructeurs ainsi ne pas obtenir mes mises à jour de chemin et ainsi semblaient ne pas obtenir le chemin d'Apache. Cela m'a amené à croire que leurs chemins ont été mis ailleurs -. Mais ce n'est pas le cas

Redémarrer le système a fait l'affaire; les nouveaux constructeurs ont obtenu le nouveau chemin d'Apache et maintenant tout fonctionne comme prévu. Il y a probablement une autre façon de redémarrer les constructeurs, mais je n'ai pas étudié cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top