2010-02-07 21 views
1

J'essaie d'obtenir CruiseControl.rb pour exécuter rcov pendant une construction. Il est actuellement défaut avec l'erreur suivante:CruiseControl.rb PATH

sh: rcov: not found 

Depuis que je peux courir rcov à partir du shell lorsque je me connecte, je figure que c'est un problème de PATH. (En outre, je peux exécuter à la fois rake test:rcov et rake cruise du shell sans erreurs). J'ai ajouté une déclaration 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 dans/var/lib/pierres précieuses /1.8/bin/rcov, il n'est donc pas étonnant que CC.rb ne puisse pas le trouver.

Cependant, je n'arrive pas à comprendre comment régler le chemin correctement. J'ai cet ensemble au fond de mon .profile:

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

C'est ce qui fonctionne de manière interactive, mais il est pas repris par CC. J'utilise CruiseControl.rb sous Passenger 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 où le chemin est défini? Tout d'abord, votre profil .profile est faux.

Répondre

1

Vous devez exporter la variable d'environnement avant qu'elle ne soit visible par les autres processus. Comme ceci:

export PATH=.... 

ou

PATH=... 
export PATH 

valeurs des variables d'environnement non exportés ne peuvent être accessibles à partir dans le même processus shell.

Mais ce n'est pas votre problème puisque vous utilisez Phusion Passenger. .profile est seulement lu par le shell, et puisque Apache n'est pas démarré à partir du shell, mais à partir 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> 
+0

De tous les droits, cela semble fonctionner ... mais pour une raison quelconque, ce n'est pas le cas. –

+0

Clarification: le chemin est correctement défini pour CC/Passenger. Toutefois, ce chemin n'est * pas * utilisé lors de l'appel du générateur. –

0

Je suis enfin que tout fonctionne.

Premièrement, le conseil de @ Hongli concernant la définition de PATH dans Apache était correct; SetEnv a été en mesure de définir le PATH pour le site basé sur le passager. Après avoir creusé le code CruiseControl.rb, j'ai découvert le problème secondaire (auquel j'ai fait allusion dans mes commentaires à la réponse de Hongli). Au démarrage, CC.rb forke un processus de construction pour chaque projet. Chaque processus obtient le chemin de son parent au moment où il a été créé. Mon problème était que je redémarrais Apache, mais cela ne redémarrait pas les processus du générateur pour une raison quelconque. Les constructeurs n'ont donc pas reçu mes mises à jour PATH, et semblaient donc ne pas obtenir le PATH d'Apache. Cela m'a amené à croire que leurs chemins ont été fixés ailleurs - mais ce n'est pas le cas.

Le redémarrage du système a fait l'affaire; les nouveaux constructeurs ont obtenu le nouveau PATH d'Apache et maintenant tout fonctionne comme prévu.Il y a probablement un autre moyen de redémarrer les builders, mais je n'ai pas étudié cela.