Можно ли изменить код flask без повторного запуска сервера flask после развертывания? - PullRequest
3 голосов
/ 05 марта 2020

Учтите, у меня установлен сервер flask, который перенаправляет на несколько веб-страниц. Если я хочу изменить содержимое одного маршрута, изменив его код, можно ли отразить эти изменения на веб-страницах без перезапуска сервера flask? Можно разместить и перезапустить другие сценарии на сервере linux или запустить другой сервер flask, если URL-адрес веб-сайта (номер порта и маршрут) не изменяется.

Пожалуйста, предложите любой способ, которым вы можно придумать!

Ответы [ 5 ]

0 голосов
/ 14 марта 2020

Я думаю, что вы можете сделать это только с Apache веб-сервером. См. документацию Flask . Я еще не пробовал (пока), но когда вы развернули новый код, любое небольшое изменение в файле wsgi должно автоматически перезагрузить код.

Вы упомянули два требования

  1. У меня развернут flask сервер. Я предполагаю, что вы имеете в виду, что он развернут в производственной среде. Это автоматически исключает режим отладки с сервера разработки, поскольку не является стабильным, эффективным или безопасным для производственного использования .
  2. Без перезапуска сервера flask Это исключает автоматическую перезагрузку, потому что это полностью перезапустит ваш сервер. Любые запросы, поступающие до тех пор, пока сервер не будет снова готов, завершатся неудачей.
0 голосов
/ 14 марта 2020

настройка flask среда сделает все за вас в оболочке.

export FLASK_ENV=development
0 голосов
/ 10 марта 2020

Один из способов - запустить приложение в режиме отладки ON - app.run(debug=True)

Проблема этого подхода заключается в том, что ваше приложение будет отображаться через inte rnet с помощью внутреннего отладчика приложения, для которого не нужно делать .

Лучший способ, о котором я могу подумать, - это вызывать функции, которые нужно часто менять, из другого файла, отличного от того, где Ваш основной flask код существует и изменяется в этом файле при необходимости. Таким образом, вам не нужно менять код Flask, и вам не нужно перезапускать приложение


Редактировать:

Пример Flask маршрут будет

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    # Route's business logic usually goes here
    return data

Теперь вместо того, чтобы записывать бизнес-логи вашего приложения c в тот же файл, что и ваш маршрут, вы можете просто записать его в другой файл следующим образом и импортировать в файл с маршрутом:

Файл с бизнес-логи c

def process_hello_world(params):
    # Write your business logic here which you want to change without reloading the application
    return data

А в файле приложения с маршрутом вызовите бизнес-логи c следующим образом:

from flask import Flask
from 
app = Flask(__name__)

@app.route('/')
def hello_world():
    data = process_hello_world()
    return data
0 голосов
/ 13 марта 2020

Предполагается, что вы используете flask сервер разработки,

Да, возможно использование use_reloader=True,

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    # You business logic code
    return some_data

if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=8000,
            use_reloader=True, threaded=True)


Однако не рекомендуется использовать его на производстве, так как Является ли сервер в комплекте с Flask безопасным для использования в производстве?

0 голосов
/ 07 марта 2020

Я предполагаю, что вы хотите, чтобы ваша служба развертывания распознала, что в файле произошло изменение, что побуждает его автоматически перезагружаться, чтобы отразить изменения, а не перезапускать службу вручную.

При условии, что вы развертываете на производственном сервере uWSGI, запуск службы с touch-reload=/path/to/folder позволит перезагрузить uWSGI, когда указанный файл / папка будет изменен или затронут. https://uwsgi-docs.readthedocs.io/en/latest/Options.html#touch -зарядка

--touch-reload=/path/to/file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...