Obecnie rozwijam aplikację opartą na flask
. Działa dobrze rozdaje serwer ręcznie przy użyciu app.run()
. Próbowałem go teraz uruchomić przez mod_wsgi
. O dziwo, dostaję błąd 500 i nic w dziennikach. Zbadałem trochę i oto moje odkrycia.500 Błąd bez niczego w dziennikach apache
- Wstawianie linii, takiej jak
print >>sys.stderr, "hello"
, działa zgodnie z oczekiwaniami. Komunikat pojawia się w dzienniku błędów. - Podczas wywoływania metody bez użycia szablonu działa dobrze. Błąd nr 500.
- Użycie prostego szablonu również działa dobrze.
- ALE jak tylko wyzwolę dostęp do bazy danych wewnątrz szablon (na przykład zapętlanie przez zapytanie) Otrzymuję błąd.
Moje gut mówi mi, że to SQLAlchemy, które emituje błąd, i może konfiguracja logowania spowoduje, że dziennik zostanie odrzucony w pewnym momencie aplikacji.
Dodatkowo do testowania używam SQLite. To, o ile pamiętam, można uzyskać tylko z jednego wątku. Więc jeśli mod_wsgi
spawns więcej wątków, może przerwać aplikację.
Jestem trochę zagubiona, ponieważ tylko zrywa się z uruchomieniem za mod_wsgi
, która również wydaje się połykać moje błędy. Co mogę zrobić, aby błędy pojawiły się w apache error_log?
Dla odniesienia, kod można zobaczyć on this github permalink.
http://flask.pocoo.org/docs/errorhandling/ wyjaśnia to również.Jeśli tryb debugowania jest włączony, błędy przepływają do dziennika apache. Gdy go wyłączysz, musisz mieć skonfigurowane rejestrowanie lub nie przejdą one nigdzie. Mogę potwierdzić, że 'logging.handlers.SMTPHandler' działa ładnie dla wdrożonych aplikacji. –
@ robots.jpg: Brakowało mi tego ... Czasami najlepiej jest przeczytać kilka razy dokumenty ...;) – exhuma
Sądzę, że są równoważne, z wyjątkiem tego, że są nieglobalne: 'app.logger.addHandler (logging.StreamHandler (stream = sys.stderr)) ' – jpmc26