Я изучаю, как разработать приличное веб-приложение с Python. Поскольку я не хочу, чтобы некоторые высококлассные структуры мешали мне, мой выбор упал на облегченную фляжную структуру. Время покажет, был ли это правильный выбор.
Итак, теперь я настроил сервер Apache с mod_wsgi, и мой тестовый сайт работает нормально. Тем не менее, я бы хотел ускорить процедуру разработки, сделав сайт автоматически перезагруженным при любых изменениях в файлах py или шаблонов, которые я делаю. Я вижу, что любые изменения в файле .wsgi сайта приводят к перезагрузке (даже без WSGIScriptReloading On в конфигурационном файле apache), но мне все равно придется его вручную выталкивать (т.е. Вставлять дополнительные строки, сохранять). Есть ли способ вызвать перезагрузку, когда я редактирую некоторые файлы app py? Или я ожидаю использовать IDE, которая обновляет файл .wsgi для меня?
Ответ 1
Текущий рекомендуемый способ (Flask >= 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
Ответ 2
Если вы говорите о средах test/dev, просто используйте опцию отладки. Он автоматически перезагрузит приложение колбы, когда произойдет изменение кода.
app.run(debug=True)
Или из оболочки:
$ export FLASK_DEBUG=1
$ flask run
http://flask.pocoo.org/docs/quickstart/#debug-mode
Ответ 3
В средах тестирования/разработки
Отладчик werkzeug уже имеет функцию автозагрузки, которую можно включить, выполнив одно из следующих действий:
app.run(debug=True)
или
app.debug = True
Вы также можете использовать отдельный файл конфигурации для управления всей своей настройкой, если вам нужно. Например, я использую параметр "settings.py" с опцией "DEBUG = True". Импортировать этот файл также легко,
app.config.from_object('application.settings')
Однако это не подходит для производственной среды.
Производственная среда
Лично я выбрал Nginx + uWSGI поверх Apache + mod_wsgi по нескольким причинам производительности, а также по настройкам. Параметр touch-reload позволяет указать файл/папку, которая заставит приложение uWSGI перезагрузить недавно развернутое фляжное приложение.
Например, ваше обновление script отключает ваши новейшие изменения и затрагивает файл reload_me.txt. Ваш uWSGI ini script (который поддерживается Supervisord - очевидно) имеет эту строку где-то:
touch-reload = '/opt/virtual_environments/application/reload_me.txt'
Надеюсь, это поможет!
Ответ 4
Если вы используете uwsgi, просмотрите опцию автоматической перезагрузки python:
uwsgi --py-autoreload 1
Пример uwsgi-dev-example.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. Ру
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. Просто запуская приложение флеш с его встроенным веб-сервером позади nginx, это приведет к ошибке плохого шлюза.
Ответ 5
Несколько обновлений для Flask 1.0
Основной подход к горячей перезагрузке:
$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
- Вы должны использовать
FLASK_ENV=development
(не FLASK_DEBUG=1
) - в качестве проверки безопасности вы можете запустить
flask run --debugger
только для того, чтобы убедиться, что она flask run --debugger
- CLI Flask теперь будет автоматически читать такие вещи, как
FLASK_APP
и FLASK_ENV
если у вас есть файл .env
в корне проекта (из-за интеграции с python-dotenv
) - вот рабочая ссылка на документацию (ссылка принятого ответа не работает)
Ответ 6
Для достижения этого в PyCharm установите раздел "Переменные среды" в:
PYTHONUNBUFFERED = 1; FLASK_DEBUG = 1
Для Flask "запуск/отладка конфигураций"
Ответ 7
лучший Sloution - использовать usereloader
if __name__=='__main__':
app.run(port=5000,debug=True,use_reloader=True)