使用flask-migrate with flask-script,flask-socketio和application factory

时间:2015-05-26 09:31:09

标签: flask flask-migrate flask-socketio flask-script

我正在使用应用程序工厂方法创建一个烧瓶应用程序,但在使用带有socketio和flask-script的Flask-Migrate时出现问题。

问题在于我将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 个答案:

答案 0 :(得分:8)

根据米格尔的评论,我发现了一种有效的方法。

由于某种原因,以下代码无效

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)