2012-06-04 5 views
5

Ich bin eine Anwendung von supervisord ausgeführt und ich muss eine Umgebung für sie einrichten. Es gibt ungefähr 30 Umgebungsvariablen, die gesetzt werden müssen. Ich habe versucht, alles auf einer großensupervisord Umgebungsvariablen Einrichten der Anwendung

Umgebung setzen =

Linie und das scheint nicht zu funktionieren. Ich habe auch mehrere enviroment = Linien ausprobiert, und das scheint auch nicht zu funktionieren. Ich habe auch beides mit und ohne 'um den env Wert versucht.

Was ist der beste Weg, um meine Umgebung so einzurichten, dass sie unter Supervisord-Kontrolle intakt bleibt? Soll ich mein aktuelles Programm (tornado, fwiw) von einem Shell-Skript mit der dort vorinstallierten Umgebung aufrufen? Im Idealfall möchte ich alle Umgebungsvariablen in eine Include-Datei einfügen und sie mit einem Supervisor laden, aber ich bin offen dafür, das anders zu machen.

UPDATE:

Hier ist, was ich in der Conf-Datei bin mit:

environment= 
    PYTHONPATH=/srv/obsf/current/:$PYTHONPATH, 
    PYTHON_EGG_CACHE=/srv/obfs/current/.python-eggs, 
    OBFS_API_ENVIRONMENT_STAGE=test, 

Dies gilt für etwa 30 Linien auf, mit einer Menge von Umgebungsvariablen. Wenn ich das Programm ausführe, stürzt es sofort ab und beschwert sich, dass die Umgebungsvariable OBFS_API_ENVRIONMENT_STAGE nicht gesetzt ist.

+0

Zuletzt habe ich es verwendet, das Format 'environment = KEY = val, KEY2 = val2' hat funktioniert. Können Sie die Zeile einfügen, die Sie versucht haben? – Bittrance

Antwort

4

Wie sich herausstellt, ist das nachfolgende Komma ein Problem. Ich habe alle env-Zeichenfolgen zitiert und das abschließende Komma entfernt. Alles funktioniert jetzt.

+0

Herzlichen Glückwunsch zum Fix! Wenn Sie in der Lage sind, achten Sie bitte darauf, Ihre Antwort als "akzeptiert" zu markieren, damit andere von Ihrem Erfolg lernen können. Prost ~ –

+0

Das Zitieren der ENV-Variablen, die ich hinzufügen wollte, funktionierte für mich. Vielen Dank. – shawn

+0

Tatsächlich wird ein abschließendes Komma dazu führen, dass der nächste Zeilenalgo als Umgebungseinstellung interpretiert wird. – WhyNotHugo

8

Die relevant documentation section erklärt, dass Sie die Variablen als durch Kommata getrennte Schlüssel/Wert-Paare zur Liste benötigen:

Umgebung

Eine Liste von Schlüssel/Wert-Paare in Form KEY = val, TASTE2 = val2 wird in die Umgebung des Supervisord-Prozesses (und somit in alle Umgebungen seines Kindprozesses) eingefügt. Diese Option kann den Wert% (hier) enthalten, der auf das Verzeichnis erweitert wird, in dem die Supervisordatei gefunden wurde. Beachten Sie, dass Subprozesse die Umgebungsvariablen der Shell erben, die zum Starten von Supervisord verwendet werden, mit Ausnahme der hier überschriebenen Shells und innerhalb der Zeilengruppe der Umgebungskonfiguration des Programms.

Die example for this section verwendet auch Komma:

environment = KEY1=value1,KEY2=value2 

Intern ist dies parsed into a dict mit dem Python shlex lexer, so dass es dann richtig mit der Quotierung beschäftigen. Es wird auch Leerzeichen abzustreifen, so um die Dinge besser lesbar, Sie Dinge über mehrere Zeilen aufteilen könnte:

environment = 
    KEY1="Some longer value containing whitespace", 
    KEY2=value2-on-a-new-line, 

Beachten Sie, dass ein Komma ist optional; Es wird keinen Unterschied in der Ausgabe machen.

fehlen ein Komma nach KEY1 jedoch seltsamen Werten führen könnte (das obige Beispiel minus das Komma nach whitespace" würden Sie {'KEY1': 'Some longer value containing whitespace', '=': ','} als die Umwelt dict) als die Gleichheits Anforderung unterzeichnen wird nicht rigoros geprüft. Ich habe submitted a pull request, um das zu beheben.

+0

> Beachten Sie, dass ein abschließendes Komma optional ist; Es wird keinen Unterschied in der Ausgabe machen. WhyNotHugo

+0

@Hugo: Ist die nächste Zeile eingerückt? Die nächste Zeile wird * nicht an den Code übergeben, der den Wert * behandelt. Ich werde morgen noch einmal darüber nachdenken, aber wie der Konfigurationsparser (Python-Standardbibliothek) funktioniert, was Sie beschreiben, ist unmöglich. –

+0

@Hugo: über den Code erneut schauen, sollte es nicht möglich sein, dass das nachfolgende Komma in einer nächsten Zeile aus der Konfig ziehen kann. Kannst du mir bitte eine Beispielkonfiguration (Gist oder Pastie) zeigen, die dieses Verhalten demonstriert? –

Verwandte Themen