Mam projekt Heroku, który używa zmiennych środowiskowych do uzyskania swojej konfiguracji, ale najpierw używam virtualenv do testowania mojej aplikacji lokalnie.
Czy istnieje sposób na ustawienie zmiennych środowiskowych zdefiniowanych na maszynie zdalnej w virtualenv?
python
heroku
environment-variables
virtualenv
Mahmoud Hanafy
źródło
źródło
.env
pliki Bork Heroku buduje, przynajmniej z mojego doświadczenia. Więc nie umieszczaj go w swoim repozytorium. Wieloletni użytkownik / wielki fan autoenv btw. Cześć Kenneth, ty stary!Jeśli używasz virtualenvwrapper (bardzo polecam to zrobić), możesz zdefiniować różne hooki (preactivate, postactivate, preactivate, postdeactivate) przy użyciu skryptów o tych samych nazwach w
$VIRTUAL_ENV/bin/
. Potrzebujesz haka po aktywacji.Jeśli chcesz zachować tę konfigurację w katalogu projektu, po prostu utwórz łącze symboliczne z katalogu projektu do
$VIRTUAL_ENV/bin/postactivate
.Możesz nawet zautomatyzować tworzenie dowiązań symbolicznych za każdym razem, gdy używasz mkvirtualenv .
Czyszczenie po dezaktywacji
Pamiętaj, że to nie posprząta po sobie. Po dezaktywacji virtualenv zmienna środowiskowa pozostanie. Aby wyczyścić symetrycznie, możesz dodać do
$VIRTUAL_ENV/bin/predeactivate
.Pamiętaj, że jeśli używasz tego dla zmiennych środowiskowych, które mogą już być ustawione w twoim środowisku, to nieustawienie spowoduje ich całkowite wyłączenie przy opuszczaniu virtualenv. Więc jeśli jest to w ogóle prawdopodobne, możesz tymczasowo nagrać poprzednią wartość, a następnie odczytać ją ponownie po dezaktywacji.
Ustawiać:
Test:
źródło
ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
praca nie działa na mnie.ln
chce pełnej ścieżki, więc musiałem to zrobićln -s `pwd`/.env/postactivate $VIRTUAL_ENV/bin/postactivate
ln
.ln
lubi pełne ścieżki, więc spróbowałem i zadziałało. Kiedy próbowałem uzyskaćcat
link symboliczny ze ścieżką względną, powiedziałNo such file or directory
.Możesz spróbować:
w virtualenv_root / bin / activ. Zasadniczo skrypt aktywacyjny jest wykonywany, gdy zaczynasz używać virtualenv, dzięki czemu możesz tam umieścić wszystkie swoje ustawienia.
źródło
deactivate
funkcji zdefiniowanej virtualenv_root / bin / activ, aby ustawić balans i rozbrajaćUżywając tylko virtualenv (bez virtualenvwrapper ), ustawianie zmiennych środowiskowych jest łatwe za pomocą
activate
skryptu, który pozyskujesz w celu aktywacji virtualenv.Biegać:
Dodaj zmienne środowiskowe na końcu pliku w następujący sposób:
Możesz także ustawić podobny punkt zaczepienia, aby anulować ustawienie zmiennej środowiskowej, zgodnie z sugestią Danilo Bargena w jego świetnej odpowiedzi powyżej, jeśli potrzebujesz.
źródło
cd
tylko po to, by mieć zmienne środowiskowe? dreszczChociaż jest tutaj wiele fajnych odpowiedzi, nie widziałem opublikowanego rozwiązania, które obejmuje usuwanie zmiennych środowiskowych przy dezaktywacji i nie wymaga dodatkowych bibliotek poza tym
virtualenv
, więc oto moje rozwiązanie, które polega tylko na edycji / bin / aktywowaniu za pomocą zmienneMY_SERVER_NAME
iMY_DATABASE_URL
jako przykłady:W skrypcie aktywacyjnym powinna znajdować się definicja dezaktywacji, a na końcu chcesz usunąć ustawienia zmiennych:
Następnie na końcu skryptu aktywacji ustaw zmienne:
W ten sposób nie musisz instalować niczego innego, aby działał, i nie kończy się na tym, że zmienne pozostają po
deactivate
uruchomieniu virtualenv.źródło
Lokalnie w ramach virtualenv można to przetestować na dwa sposoby. Pierwsza to narzędzie, które jest instalowane za pośrednictwem paska narzędzi Heroku (https://toolbelt.heroku.com/). Narzędziem jest brygadzista. Wyeksportuje wszystkie zmienne środowiskowe, które są przechowywane lokalnie w pliku .env, a następnie uruchomi procesy aplikacji w pliku Procfile.
Drugim sposobem, jeśli szukasz lżejszego podejścia, jest posiadanie pliku .env lokalnie, a następnie uruchomienie:
źródło
Zainstaluj autoenv albo przez
(lub)
Następnie utwórz
.env
plik w folderze projektu virtualenvTeraz wszystko działa dobrze.
źródło
Jeśli korzystasz już z Heroku, rozważ uruchomienie serwera przez Foreman . Obsługuje
.env
plik, który jest po prostu listą wierszy,KEY=VAL
które zostaną wyeksportowane do Twojej aplikacji przed uruchomieniem.źródło
Innym sposobem na zrobienie tego, który został zaprojektowany dla django, ale powinien działać w większości ustawień, jest użycie django-dotenv.
źródło
Aby aktywować virtualenv w
env
katalogu i wyeksportować używane zmienne envinroment.env
:źródło
echo 'alias e=". env/bin/activate && set -a; source .env; set +a"' >> ~/.bash_aliases