在代码或`flask run`命令中指定Flask重新加载监视列表(extra_files)

时间:2017-04-28 20:57:40

标签: flask werkzeug

我有一些Flask应用程序,我通过设置FLASK_APP环境变量并调用flask run来运行。由于FLASK_DEBUG也已设置,因此每当我更改某些代码时,应用程序都会方便地重新加载。

但不是所有代码。还有其他文件,即我用app.config.from_pyfile加载的配置文件,我希望应用程序也可以观看,所以如果我更改它,它会重新加载。我怎么能这样做?

我知道如果我从代码中调用它,我可以在内置的Werkzeug服务器中指定extra_files。但正如我所提到的,我实际上正在使用内置的flask run命令。我在这个项目中有多个应用程序,因此可以选择使用FLASK_APP运行哪个应用程序已经证明很方便...除了这似乎不是指定extra_files的方法。我可以编写一些同时执行这两种操作的引导代码,但我更喜欢使用某种内置方式(如果存在)。

如果我可以简单地在应用程序本身中指定文件,在加载时将它们添加到监视列表中,那将是特别方便的。遗憾的是,extra_files似乎并不是App对象的成员,即使它是app.run()中的参数。

我无法想象这是一个不常见的用例。 Flask是否提供了我想做的事情?

3 个答案:

答案 0 :(得分:1)

我刚刚在manage.py中尝试了以下命令:

@manager.option('-w', '--wsgi_server', dest='server', default='flask',
            help='[flask|gevent|tornado]')
@manager.option('-p', '--port', dest='port', default=5000,
            help='Port to listen')
@manager.option('-d', '--debug', dest='debug', action="store_true", default=False,
            help='Show debugging information')
def run(server, port, debug):
    app.connexion_app.run(
        port=int(port),
        server=server,
        debug=debug,
        extra_files=[
            './proj/oauth2/swagger.yaml',
            './proj/api/swagger.yaml',
        ])

extra_files似乎很好:

 * Debugger is active!
 * Debugger PIN: 336-632-033
 * Detected change in '<-snip->/proj/api/swagger.yaml', reloading

答案 1 :(得分:0)

您还可以使用FLASK_RUN_EXTRA_FILES环境变量。 参见https://flask.palletsprojects.com/en/1.1.x/cli/#watch-extra-files-with-the-reloader

答案 2 :(得分:0)

您可以导出这些变量并指定所需的文件。

FLASK_APP=/usr/src/app/server.py

# to enable debug to enable reload on file change
FLASK_DEBUG=1

# here specify the file
FLASK_RUN_EXTRA_FILES="/usr/src/app/banuka.txt"

我已经尝试过了,它正在按预期工作。但这不能保证浏览器会重新加载,因为必须手动刷新浏览器。