2012-06-04 17 views
5

Używam aplikacji od supervisora ​​i muszę skonfigurować dla niego środowisko. Istnieje około 30 zmiennych środowiskowych, które należy ustawić. Próbowałem oddanie wszystko w jednym wielkimsupervisora ​​zmienne środowiskowe konfiguracja aplikacji

środowiska =

linię i że nie wydają się działać. Próbowałem również wielu środowisk = linie, i to też nie działa. Próbowałem również zarówno zi bez "wokół wartości env.

Jaki jest najlepszy sposób na ustawienie środowiska tak, aby pozostawał nienaruszony pod kontrolą nadzoru? Czy powinienem wywoływać mój aktualny program (tornado, fwiw) ze skryptu powłoki z zainstalowanym tam środowiskiem? Idealnie, chciałbym umieścić wszystkie zmienne środowiskowe w pliku włączającym i załadować je z opiekunem, ale jestem otwarty na zrobienie tego w inny sposób.

UPDATE:

Oto co używam w pliku conf:

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

Trwa to około 30 linii, z dużą ilością zmiennych środowiskowych. Kiedy wykonuję program, zawiesza się natychmiast narzekając, że zmienna środowiskowa OBFS_API_ENVRIONMENT_STAGE nie jest ustawiona.

+0

Ostatnio użyłem go, działało 'environment = KEY = val, KEY2 = val2'. Czy możesz wkleić wybraną linię? – Bittrance

Odpowiedz

4

Jak się okazuje, przecinek końcowy jest problemem. Zacytowałem wszystkie ciągi env i usunąłem przecinek końcowy. Wszystko działa teraz.

+0

Gratulacje dla poprawki! Kiedy będziesz w stanie, upewnij się, że Twoja odpowiedź jest oznaczona jako "zaakceptowana", aby inni mogli uczyć się na Twoim sukcesie. Pozdrowienia ~ –

+0

Cytowanie zmiennych ENV, które próbowałem dodać, działało dla mnie. Dzięki. – shawn

+0

Rzeczywiście, końcowy przecinek spowoduje, że następna linia zostanie przetłumaczona jako ustawienie środowiska. – WhyNotHugo

8

relevant documentation section wyjaśnia, że ​​trzeba wymienić zmienne jak par klucz/wartość oddzielonych przecinkami:

środowiska

lista par klucz/wartość w postaci klucz = val, KEY2 = val2, który zostanie umieszczony w środowisku procesu nadzorczego (iw rezultacie we wszystkich jego procesach potomnych). Ta opcja może zawierać wartość% (tutaj) s, która rozwija się do katalogu, w którym znaleziono plik konfiguracyjny supervisora. Zauważ, że podprocesy odziedziczą zmienne środowiskowe powłoki używanej do uruchamiania superwidryny, z wyjątkiem tych, które zostały przesłonięte tutaj oraz w sekcji konfiguracji środowiska programu.

example for this section wykorzystuje również przecinkami:

environment = KEY1=value1,KEY2=value2 

Wewnętrznie to parsed into a dict pomocą Pythona shlex lexer, więc będzie ona zajmować się podając prawidłowo. Będzie też rozebrać spacje, tak aby uczynić to bardziej czytelny, można podzielić rzeczy na wielu liniach:

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

pamiętać, że przecinek spływu jest opcjonalny; nie wpłynie to na wydajność. Brakujący przecinek po KEY1 może jednak prowadzić do dziwnych wartości (powyższy przykład, minus przecinek po whitespace" dałby {'KEY1': 'Some longer value containing whitespace', '=': ','} jako dyktando środowiska), ponieważ wymóg dotyczący znaku równości nie jest rygorystycznie sprawdzany. Mam submitted a pull request, aby temu zaradzić.

+0

> Zwróć uwagę, że końcowy przecinek jest opcjonalny; nie wpłynie to na wydajność. WhyNotHugo

+0

@ Hugo: czy następna linia jest wcięta? Następny wiersz * nie jest przekazywany do kodu, który obsługuje wartość *. Zajrzę to jeszcze raz jutro, ale sposób, w jaki działa parser konfiguracyjny (biblioteka standardowa Python), co opisałeś jest niemożliwe. –

+0

@ Hugo: patrząc na kod ponownie, nie powinno być żadnego sposobu, że końcowy przecinek może wyciągnąć następną linię z konfiguracji. Czy możesz pokazać mi przykładową konfigurację (użyj Gist lub Pastie), która demonstruje to zachowanie? –

Powiązane problemy