Badam, jak stworzyć przyzwoitą aplikację internetową za pomocą Pythona. Ponieważ nie chcę, aby niektóre wysokopoziomowe struktury stanęły mi na drodze, mój wybór padł na lekką platformę Flask . Czas pokaże, czy to był właściwy wybór.
Więc teraz skonfigurowałem serwer Apache z mod_wsgi, a moja strona testowa działa poprawnie. Chciałbym jednak przyspieszyć procedurę programistyczną poprzez automatyczne ładowanie strony po wszelkich zmianach w plikach py lub szablonach, które wprowadzę. Widzę, że wszelkie zmiany w pliku .wsgi witryny powodują przeładowanie (nawet bez WSGIScriptReloading On w pliku konfiguracyjnym apache), ale nadal muszę go ręcznie nakleić (tj. Wstawić dodatkowy podział wiersza, zapisać). Czy jest jakiś sposób, aby spowodować przeładowanie, gdy edytuję niektóre pliki py aplikacji? A może mam używać IDE, które odświeża plik .wsgi?
flask run
również działa, ponieważ kiedy typip install flask
, plik wykonywalny kolby jest również instalowany wvenv/bin/
folderze.Jeśli mówisz o środowiskach test / dev, skorzystaj z opcji debugowania. Automatycznie przeładuje aplikację kolby, gdy nastąpi zmiana kodu.
Lub z powłoki:
http://flask.pocoo.org/docs/quickstart/#debug-mode
źródło
W środowiskach testowych / programistycznych
Debuger werkzeug ma już dostępną funkcję „automatycznego przeładowania”, którą można włączyć, wykonując jedną z następujących czynności:
lub
Możesz także użyć osobnego pliku konfiguracyjnego do zarządzania całą konfiguracją, jeśli zajdzie taka potrzeba. Na przykład używam „settings.py” z opcją „DEBUG = True”. Importowanie tego pliku jest również łatwe;
Nie jest to jednak odpowiednie dla środowiska produkcyjnego.
Środowisko produkcyjne
Osobiście wybrałem Nginx + uWSGI zamiast Apache + mod_wsgi z kilku powodów wydajnościowych, ale także opcji konfiguracji. TheDotykowy reload opcja pozwala określić plik / folder, który spowoduje, że aplikacja uWSGI aby przeładować nowo wdrożonego aplikację kolby.
Na przykład skrypt aktualizacji ściąga najnowsze zmiany i dotyka pliku „reload_me.txt”. W twoim skrypcie ini uWSGI (który jest nadzorowany przez Supervisord - oczywiście) znajduje się w nim ta linia:
Mam nadzieję, że to pomoże!
źródło
.ini
plik konfiguracyjny uwsgi . Jeśli czytasz dokumentację dotyczącą „przeładowania dotykowego”, jest ona w konfiguracji uWSGI, a nie w superwizorze.app.run(debug=True)
kończy się niepowodzeniem, ale ustawienie zmiennej środowiskowej działa.Jeśli używasz uwsgi, spójrz na opcję automatycznego przeładowania Pythona:
Przykład uwsgi-dev-example.ini:
root_root / __ init__.py
Następnie uruchomić:
Uwaga: ten przykład włącza także debugger.
Poszedłem tą drogą, aby jak najbardziej naśladować produkcję dzięki mojej konfiguracji nginx. Wystarczy uruchomić aplikację flask z wbudowanym serwerem sieciowym za nginx, co spowodowałoby zły błąd bramy.
źródło
Kilka aktualizacji Flask 1.0 i nowszych
podstawowe podejście do ponownego ładowania na gorąco to:
FLASK_ENV=development
(nieFLASK_DEBUG=1
)flask run --debugger
aby upewnić się, że jest włączonyFLASK_APP
aFLASK_ENV
jeśli masz.env
plik w katalogu głównym projektu i masz zainstalowany program python-dotenvźródło
export FLASK_ENV=development
pracował dla mnie.app.run(debug=True)
nie wydaje się działać.Mam inny pomysł:
Pierwszy:
Zainstaluj
python-dotenv
moduł, który odczyta lokalne preferencje środowiska projektowego.Druga:
Dodaj
.flaskenv
plik do katalogu projektu. Dodaj następujący kod:Zrobione!
Dzięki tej konfiguracji dla projektu Flask, po uruchomieniu
flask run
zobaczysz ten wynik w swoim terminalu:A kiedy edytujesz plik, po prostu zapisz zmianę. Zobaczysz, że automatyczne przeładowanie jest dla Ciebie:
Więcej wyjaśnień:
Oczywiście możesz ręcznie trafić za
export FLASK_ENV=development
każdym razem, gdy potrzebujesz. Ale użycie innego pliku konfiguracyjnego do obsługi rzeczywistego środowiska pracy wydaje się lepszym rozwiązaniem, dlatego zdecydowanie polecam tę metodę, której używam.źródło
FLASK_APP
zmiennej do.flaskenv
pliku.Aplikacje kolby można opcjonalnie uruchamiać w trybie debugowania. W tym trybie dwa bardzo wygodne moduły serwera programistycznego o nazwie reloader i debugger domyślnie włączone są . Gdy reloader jest włączony, Flask obserwuje wszystkie pliki kodu źródłowego twojego projektu i automatycznie restartuje serwer, gdy którykolwiek z plików zostanie zmodyfikowany.
Domyślnie tryb debugowania jest wyłączony. Aby ją włączyć, ustaw
FLASK_DEBUG=1
zmienną środowiskową przed wywołaniem kolbyrun
:Serwer działający z włączonym przeładowaniem jest niezwykle przydatny podczas programowania, ponieważ za każdym razem, gdy modyfikujesz i zapisujesz plik źródłowy, serwer automatycznie uruchamia się ponownie i odbiera zmianę.
źródło
Aby to osiągnąć w PyCharm, ustaw sekcję „Zmienne środowiskowe” na:
W przypadku konfiguracji uruchamiania / debugowania Flask.
źródło
$ env: Flask_ENV = "MyAPP.py"
$ env: Flask_ENV = „rozwój”
uruchomić kolbę
To powinno działać
źródło