Автоматическая перезагрузка приложения 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

http://flask.pocoo.org/docs/quickstart/#debug-mode


в средах тестирования/разработки

отладчик 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

для колбы "конфигурации запуска / отладки"