Использование колбы-переноса с помощью колбы-скрипта, колбы-сокета и фабрики приложений

Я создаю приложение фляги с подходом фабрики приложений, но есть проблема при использовании 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 runpython 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)
Другие вопросы по тегам