Простая регистрация / отладка приложений с помощью nginx, uwsgi, flask?
Я не собираюсь включатьопасная отладочная консоль, но мое приложение получает ошибку 500 и, похоже, не выдает никаких выводов для более глубокого изучения.
Я виделэтот обмен в списке рассылкичто привело меняна эту страницу об ошибках регистрации.
Тем не менее, я все еще нахожу это очень запутанным и у меня есть пара вопросов:
(1) В каком файле должен находиться материал ниже?
ADMINS = ['[email protected]']
if not app.debug:
import logging
from logging.handlers import SMTPHandler
mail_handler = SMTPHandler('127.0.0.1',
'[email protected]',
ADMINS, 'YourApplication Failed')
mail_handler.setLevel(logging.ERROR)
app.logger.addHandler(mail_handler)
... предполагая, что шаблон файла «становится больше» для больших приложений?__init__.py
? config.py
? run.py
?
(2) Меня там завалили варианты, и я не могу сказать, какой из них использовать. Какие регистраторы мне следует включить, с какими настройками, чтобы реплицировать отладку локального сервера Python, которую я получаю на стандартный вывод при запуске run.py? Я считаю, что локальный выходной поток по умолчанию очень полезен, больше, чем интерактивный отладчик на странице. У кого-нибудь есть шаблон, которым он мог бы поделиться при настройке чего-либо, копирующего это с развертыванием nginx, выводящим в журнал?
(3) Есть ли что-то, что мне нужно изменить, не на уровне колбы, а в nginx, скажем, в моем/etc/nginx/sites-available/appname
файл, чтобы включить ведение журнала?
В частности, я ищу информацию, которую получаю, когда python запускается локально, о том, почему, скажем, пакет не работает, или где может быть моя синтаксическая ошибка, или какая переменная не существует:
$ python run.py
Traceback (most recent call last):
File "run.py", line 1, in <module>
from myappname import app
File "/home/me/myappname/myappname/__init__.py", line 27, in <module>
file_handler.setLevel(logging.debug)
File "/usr/lib/python2.7/logging/__init__.py", line 710, in setLevel
self.level = _checkLevel(level)
File "/usr/lib/python2.7/logging/__init__.py", line 190, in _checkLevel
raise TypeError("Level not an integer or a valid string: %r" % level)
Когда я запускаю колбу на сервере, я никогда не вижу этого. Я просто получаю ошибку uWSGI в браузере и не знаю, какой код был проблематичным. Я просто хотел бы, чтобы что-то подобное было записано в файл.
Я также заметил, что при настройке следующего ведения журнала на самом деле мало что записывается в файл, даже когда я перехожу на уровень журнала до уровня DEBUG:
from logging import FileHandler
file_handler = FileHandler('mylog.log')
file_handler.setLevel(logging.DEBUG)
app.logger.addHandler(file_handler)
mylog.log
пусто, даже когда мои приложения ошибки.
Я также добавлю, что я попытался установить debug = True следующими способами, в__init__.py
:
app = Flask(__name__)
app.debug = True
app.config['DEBUG'] = True
from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)
app.config.from_object('config')
app.config.update(DEBUG=True)
app.config['DEBUG'] = True
if __name__ == '__main__':
app.run(debug=True)
В то время как в моем файле config.py у меня есть ...
debug = True
Debug = True
DEBUG = True
Тем не менее, никакой отладки не происходит, и без регистрации или отладки это довольно сложно отследить. Ошибки просто завершают работу приложения с помощью ненужного сообщения браузера:
uWSGI Error
Python application not found