Автоматическая перезагрузка приложения python Flask при изменении кода
Я изучаю, как разработать достойное веб-приложение с Python. Поскольку я не хочу, чтобы некоторые структуры высокого порядка мешали мне, мой выбор упал на легкий база колбы. Время покажет, был ли это правильный выбор.
Итак, теперь я настроил сервер Apache с mod_wsgi, и мой тестовый сайт работает нормально. Однако я хотел бы ускорить процедуру разработки, сделав сайт автоматически перезагружаться при любых изменениях в py или файлах шаблонов, которые я делаю. Я смотрите, что любые изменения в сайте .WSGI-файл вызывает перезагрузку (даже без WSGIScriptReloading в конфигурационном файле apache), но мне все равно нужно его вручную (т. е. вставить дополнительный linebreak, сохранить). Есть ли способ вызвать перезагрузку при редактировании некоторых файлов py приложения? Или я должен использовать IDE, который обновляет .файл wsgi для меня?
6 ответов
текущий рекомендуемый способ (колба >= 0.11) с flask
утилиты командной строки.
http://flask.pocoo.org/docs/0.11/server/
пример:
$ export FLASK_APP=main.py
$ export FLASK_DEBUG=1
$ python -m flask run
или в одной команды:
$ FLASK_APP=main.py FLASK_DEBUG=1 python -m flask run
предпочитаю python -m flask run
, а не flask run
потому что первый также работает с virtualenv
.
если вы хотите другой порт по умолчанию (5000
) добавить --port
выбор.
пример:
$ python -m flask run --port 8080
дополнительные опции доступны с:
$ python -m flask run --help
Если вы говорите о средах test/dev, просто используйте опцию debug. Он автоматически перезагрузит приложение flask, когда произойдет изменение кода.
app.run(debug=True)
или из командной строки:
$ export FLASK_DEBUG=1
$ flask run
в средах тестирования/разработки
отладчик werkzeug уже имеет функцию "автоматическая перезагрузка", которая может быть включена, выполнив одно из следующих действий:
app.run(debug=True)
или
app.debug = True
вы также можете использовать отдельный файл конфигурации для управления всеми настройками, если вам нужно. Например, я использую 'settings.py' с опцией' DEBUG = True'. Импортировать этот файл тоже легко;
app.config.from_object('application.settings')
однако это не подходит для производства окружающая среда.
производственной среды
лично я выбрал Nginx + uWSGI над Apache + mod_wsgi по нескольким причинам производительности, но и параметры конфигурации. The touch-перезагрузка опция позволяет указать файл / папку, которая заставит приложение uWSGI перезагрузить недавно развернутое приложение flask.
например, ваш скрипт обновления тянет ваши новейшие изменения вниз и касается " reload_me.файл txt'. Ваш сценарий uwsgi ini (который поддерживается Supervisord-очевидно) имеет эту строку в нем где-то:
touch-reload = '/opt/virtual_environments/application/reload_me.txt'
надеюсь, это поможет!
если вы используете uwsgi, посмотрите на опцию автоматической перезагрузки python:
uwsgi --py-autoreload 1
пример uwsgi-dev-пример.ini:
[uwsgi]
socket = 127.0.0.1:5000
master = true
virtualenv = /Users/xxxx/.virtualenvs/sites_env
chdir = /Users/xxx/site_root
module = site_module:register_debug_server()
callable = app
uid = myuser
chmod-socket = 660
log-date = true
workers = 1
py-autoreload = 1
site_root/__init__.py
def register_debug_server():
from werkzeug.debug import DebuggedApplication
app = Flask(__name__)
app.debug = True
app = DebuggedApplication(app, evalex=True)
return app
выполнить:
uwsgi --ini uwsgi-dev-example.ini
Примечание: этот пример также включает отладчик.
Я пошел по этому маршруту, чтобы имитировать производство как можно ближе с моей настройкой nginx. Просто запуск приложения flask с встроенным веб-сервером за nginx приведет к плохому шлюзу ошибка.
несколько обновлений для Flask 1.0
основной подход к горячей перезагрузке:
$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
- вы должны использовать
FLASK_ENV=development
(неFLASK_DEBUG=1
) - в качестве проверки безопасности, вы можете запустить
flask run --debugger
просто чтобы убедиться, что он включен - здесь рабочая ссылка на документы (ссылка принятого ответа нарушена)
для достижения этого в PyCharm установите раздел "Переменные среды" в:
PYTHONUNBUFFERED=1; FLASK_DEBUG=1
для колбы "конфигурации запуска / отладки"