Flask 烧瓶:如何中止“;“启动”;如果配置不完整?

Flask 烧瓶:如何中止“;“启动”;如果配置不完整?,flask,configuration,Flask,Configuration,我有一个小烧瓶应用程序,需要一些配置。如果缺少什么,我想“中止”启动,这样错误会立即被发现 我的WSGI脚本很简单,但可能有助于理解我的问题: from myapp.startup import init_app app = init_app() 因此,假设在ìnit_app()中的某个地方,代码发现有问题(例如,缺少配置值或数据库架构版本过时、目录权限不安全等等),我希望确保应用程序未运行(因为它稍后仍将失败) 我可以在代码中的某个地方插入一个sys.exit(1),但随后flask会无休止

我有一个小烧瓶应用程序,需要一些配置。如果缺少什么,我想“中止”启动,这样错误会立即被发现

我的WSGI脚本很简单,但可能有助于理解我的问题:

from myapp.startup import init_app
app = init_app()
因此,假设在
ìnit_app()
中的某个地方,代码发现有问题(例如,缺少配置值或数据库架构版本过时、目录权限不安全等等),我希望确保应用程序未运行(因为它稍后仍将失败)

我可以在代码中的某个地方插入一个
sys.exit(1)
,但随后flask会无休止地重试以启动应用程序(用户看不到任何页面)。当然,我可以构建一个备用的WSGI应用程序来显示一些文本

但我希望会有某种“最佳实践”(理想情况下是现有的Python代码,这样看起来甚至“不错”)

  • 有没有办法告诉flask/WSGI服务器应用程序启动失败,不应该重试
  • 是否存在处理“设置错误”的现有代码

就关闭服务器而言,它似乎可以做您希望它做的事情


但是,当您检测到启动代码中存在错误时,您可以调用该函数,而不是从端点调用。

最近偶然发现了类似的问题

返回
sys.exit(ERRNO)
没有帮助,因为像
gunicorn
这样的WSGI服务器只会继续尝试启动另一个实例

引发运行时错误将导致应用程序中止。我不认为有一种“正确的方法”可以做到这一点,但这种方法对我来说似乎很像蟒蛇

大概是这样的:

试试看:
SECRET\u KEY=os.getenv(“FLASK\u SECRET”).encode(“utf-8”)
除属性错误外:
raise RUNTIMERROR(“未设置环境变量$FLASK\u SECRET”)
然后尝试使用
gunicorn
启动服务器将失败,并出现错误:

$gunicorn-b0.0.0.0:5000 myapi.wsgi:app
...
...
文件“path/to/myapi/config.py”,第18行,在
raise RUNTIMERROR(“未设置环境变量$FLASK\u SECRET”)
运行时错误:未设置环境变量$0\u SECRET
[2021-05-19 16:08:43+0600][17567][INFO]工人退出(pid:17567)
[2021-05-19 16:08:43+0600][17565][INFO]正在关闭:主机
[2021-05-19 16:08:43+0600][17565][INFO]原因:工作进程无法启动。
.$

答案中的链接不再有效。你们两个都有在那篇文章中发表的细节吗?我也遇到了类似的需求。页面可从档案@PhillipBoushy中找到,该档案取自此问题的公认答案: