Использование колбы-переноса с помощью колбы-скрипта, колбы-сокета и фабрики приложений
Я создаю приложение фляги с подходом фабрики приложений, но есть проблема при использовании Flask-Migrate с socketio и flask-script.
Проблема в том, что я прохожу create_app
функция к Manager
но мне нужно передать app
к моему socketio.run()
также. И сейчас я не вижу решения. Можно ли как-то объединить эти два решения?
manage.py:
#app = create_app(False) <--- Old approach
#manager = flask_script.Manager(app)
manager = flask_script.Manager(create_app)
manager.add_option("-t", "--testing", dest="testing", required=False)
manager.add_command("run", socketio.run(
app,
host='127.0.0.1',
port=5000,
use_reloader=False)
)
# DB Management
manager.add_command("db", flask_migrate.MigrateCommand)
Когда я использовал старый подход с socketio, но без колб-миграции все работало. Если я использую новый подход и удаляю часть socketio, миграция работает.
Примечание. Я хотел бы иметь возможность вызывать мое приложение с помощью обеих следующих команд.python manage.py run
python manage.py -t True db upgrade
Редактировать:
Пытаясь использовать current_app
я собираюсь RuntimeError: working outside of application context
manager.add_command("run", socketio.run(
flask.current_app,
host='127.0.0.1',
port=5000,
use_reloader=False)
)
1 ответ
На основании комментария Мигеля я нашел способ, который работает.
По какой-то причине следующий код не работает
manager.add_command("run", socketio.run(
flask.current_app,
host='127.0.0.1',
port=5000,
use_reloader=False)
)
Но это на самом деле работает.
@manager.command
def run():
socketio.run(flask.current_app,
host='127.0.0.1',
port=5000,
use_reloader=False)