Frage

Ich versuche CruiseControl.rb zu erhalten während eines Build laufen rcov. Es ist derzeit mit dem folgenden Fehler Fehler:

sh: rcov: not found 

Da ich rcov von der Shell ausgeführt werden kann, wenn ich mich einloggen, ich meine, dass dies ein PATH Problem. (Außerdem kann ich beide rake test:rcov und rake cruise aus der Schale ohne Fehler ausgeführt). Ich habe eine p 'echo $PATH' Aussage (mit den richtigen Backticks, den Befehl auszuführen, dank Markdown) zu meinem cruise.rake und entdecken, dass der Weg war in der Tat falsch:

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

Die rcov ausführbar ist bei /var/lib/gems/1.8/bin/rcov, so ist es kein Wunder, dass CC.rb kann es nicht finden.

Aber ich kann nicht herausfinden, wie man den Weg bringen richtig. Ich habe diesen Satz am unteren Rand meiner .profile:

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

Dies ist, was es interaktiv macht Arbeit, aber es ist nicht von CC aufgenommen werden.

Ich bin mit CruiseControl.rb unter Passagiere Phusion (und damit unter Apache). Ich habe so viele Dateien überprüft, wie ich mir vorstellen kann, aber nichts sieht aus wie ein PATH zu mir.

Wo kann ich den Pfad und / oder bestimmen, wo der Pfad festgelegt wird?

War es hilfreich?

Lösung

Zu allererst .profile ist falsch. Sie müssen die Umgebungsvariable exportieren, bevor es auf andere Prozesse sichtbar ist. Wie folgt aus:

export PATH=....

oder

PATH=...
export PATH

Nicht exportierte Umgebungsvariable Werte können nur innerhalb der gleichen Shell-Prozess zugegriffen werden.

Aber das ist nicht das Problem, da Sie laufen Phusion Passagier. .profile wird nur von dem Shell gelesen, und da Apache wird nicht von der Shell gestartet, aber aus dem System Init-Prozess, was auch immer Sie in .profile gesetzt wird ignoriert. Für Phusion Passagier muss man den Weg mit mod_env und der SetEnv Richtlinie festgelegt, wie folgt aus:

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

Andere Tipps

Ich habe endlich alles funktioniert.

Zum einen @ Hongli Rat über die PATH-Einstellung innerhalb Apache war richtig; SetEnv konnte den Pfad für den Passagier-basierte Website eingestellt.

um durch den CruiseControl.rb Code Nach dem Graben entdeckte ich das sekundäre Problem (auf die ich in meinen Kommentaren zu Hongli Antwort erwähnt). Während des Startvorgangs CC.rb Gabeln ein Builder-Prozess für jedes Projekt. Jeder Prozess erhält die PATH ihrer Mutter zu der Zeit es erstellt wurde . Mein Problem war, dass ich Apache wurde neu gestartet, aber die Builder-Prozesse aus irgendeinem Grund war nicht neu gestartet wird. Die Erbauer somit nicht bekommen meine PATH-Updates und erschien so nicht den Weg von der Apache zu bekommen. Das führte mich zu glauben, dass sich ihre Wege woanders gesetzt wurden -. Aber das ist nicht der Fall

Neustarten des Systems der Trick; die neuen Bauherren bekam den neuen Pfad von Apache und jetzt ist alles wie erwartet funktioniert. Wahrscheinlich gibt es eine andere Möglichkeit, die Erbauer neu zu starten, aber ich habe das nicht untersucht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top