2012-11-04 4 views
6

Próbowałem uruchomić to działanie od dłuższego czasu, ale teraz jestem naprawdę na swoim końcu. Próbowałem zrobić wszystko, co mogłem znaleźć na dokumentacji SO i kolbie i nadal nie mogę wykonać prostego dziennika błędów, aby móc debugować moją aplikację. Poniżej jest wklejony kod -rejestrowanie błędów kolby przy użyciu mod_wsgi

# main.py 
from flask import Flask 
import logging 

app = Flask(__name__) 
file_handler = logging.FileHandler(filename='/tmp/election_error.log') 
file_handler.setLevel(logging.WARNING) 
app.logger.addHandler(file_handler) 

@app.route('/') 
def hello(): 
    return "hello 
    #missing quotes to generate error 

if __name__ == "__main__": 
    app.run() 


#wsgi file 
import sys 
import logging 
sys.path.insert(0, "/var/www/voting_app") 
logging.basicConfig(stream=sys.stderr) 
from main import app as application 


# apache2 conf file 
WSGIDaemonProcess voting_app threads=5 
WSGIScriptAlias /election /var/www/voting_app/voting_app.wsgi 

LogLevel info 

<Directory /var/www/voting_app> 
     WSGIProcessGroup voting_app 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
</Directory> 

Proszę mi powiedzieć, gdzie mam zamiar źle. Dziękuję bardzo.

Odpowiedz

3

Będziesz musiał wygenerować wyjątek runtime, a nie wyjątek czasu kompilacji. Brakujący cytat to wyjątek czasu kompilacji, a twój kod logowania nigdy nie zostanie wykonany.

Wystarczy podnieść wyjątek zamiast:

@app.route('/') 
def hello(): 
    raise Exception('Deliberate exception raised') 
+0

To działa! Ale co z innymi błędami. To jest sztuczny plik main.py, który stworzyłem. Mam jeden, który daje błąd 500, ale plik dziennika wygląda puste? Co mogę zrobić, aby uchwycić wszelkiego rodzaju błędy, jak to pokazuje na serwerze programistycznym! Dzięki – Prakhar

+0

@Prakhar: możesz przechwycić * większość * wyjątków. Po prostu nie błędów składni, przetestuj swój kod przed wdrożeniem, aby je złapać. –

+0

Jeśli nadal widzisz błąd 500 w produkcji, twój kod kolby nie jest uruchamiany; może to być błąd konfiguracji lub błąd składni i nie można tego złapać. Sprawdź dzienniki serwera WSGI. –

5

Specyficzny utworzony błąd, który był błąd składni, spowodowałoby uszkodzenie pliku skryptu WSGI nawet ładować w mod_wsgi. Błąd w tym przypadku znalazłby się w pliku dziennika błędów Apache, a nie w pliku dziennika, który ustawiłeś przy użyciu modułu rejestrowania. Czy przejrzałeś plik rejestru błędów Apache?

W przypadku wyjątku wywołanego podczas wykonywania żądania, Flask domyślnie zamieniłby go w stronę błędu 500 i w przeciwnym razie zablokowałby wyświetlanie szczegółów. Trzeba założyć kolbę do maila lub zalogować takich wyjątków czasu wykonywania w inny sposób za:

http://flask.pocoo.org/docs/errorhandling/

Jeśli chcesz wyjątek środowiska wykonawczego mają być wyświetlane na stronie 500 powrócił do przeglądarki do celów rozwojowych, trzeba aby włączyć tryb debugowania Flask. Odbywa się to poprzez ustawienie app.debug aby mogło być prawdziwe:

http://flask.pocoo.org/docs/config/?highlight=app%20debug

Nie należy mieć włączoną na tryb debugowania użytkownik stoi system produkcyjny.