6

我正在使用Flask开发应用程序。

我想要一种快速、自动化的方式来添加和删除debug=True主函数调用:

发展:

app.run(debug=True)

生产:

app.run()

出于安全原因,如果我将调试模式设置为“在野外”,我可能会暴露有关应用程序的私人/敏感信息。

我正在考虑使用 sed 或 awk 在 git hook 中自动执行此操作(生产版本保存在我推送到的裸远程仓库中),或者将其包含在我要编写的 shell 脚本中以启动 uwsgi 和其他一些“维护”-允许应用程序正确提供的任务。

你怎么看?

4

5 回答 5

12

那不是要走的路!我的建议是创建一些配置 Python 模块(让我们说,config.py),其中包含一些内容,例如:

DEBUG = True

现在,在我们当前的代码中,这样写:

import config
app.run(debug=config.DEBUG)

现在,当您在生产中运行时,只需DEBUG从更改TrueFalse. 或者你可以让这个文件没有版本,所以开发的副本与生产的副本不同。这并不少见,因为例如,在开发和生产中不使用相同的数据库连接参数。

即使您想自动更新它,也只需在带有-i标志的配置文件上调用 sed。只更新这个文件会更安全:

$ sed -i.bkp 's/^ *DEBUG *=.*$/DEBUG = False/' config.py
于 2012-06-06T13:34:05.037 回答
5

您应该在服务器上设置一些环境变量。您的脚本可以检测此变量的存在并禁用调试。

于 2012-06-06T13:34:19.953 回答
4

我会使用sed

sed 's/debug=True//'

可移植、可编写脚本、无处不在。

于 2012-06-06T13:33:41.837 回答
4

您可能不应该app.run在生产中使用(如果您使用的是 uwsgi,您肯定不需要它)。相反,请使用 Flask优秀文档的部署部分中讨论的几个部署选项之一。(只需调用执行 Python 包含的服务器。)app.runwerkzeug.serving.run_simplewsgiref

话虽如此,正确的方法不是对源代码进行部署后编辑,而是使用特定于服务器的配置文件来更改您的设置,正如@brandizzi 在他的回答中指出的那样

您可以通过几种不同的方式执行此操作(Flask 也有这方面的文档- 请参阅 Armin 关于从文件配置处理开发-生产开关的建议):

  1. 在存储库中包含您的开发和服务器的配置。使用环境变量在它们之间切换:

    # your_app.config.develop
    DEBUG = True
    
    # your_app.config.production
    DEBUG = False
    
    # your_app.app
    from flask import Flask
    from os import environ
    
    mode = environ.get("YOURAPP_MODE")
    mode = "production" if mode is None else "develop"
    
    config = __import__("your_app.config." + mode)
    
    app = Flask("your_app")
    app.config.from_object(config)
    
  2. 将您的生产配置与您可能需要的任何其他特定于服务器的配置一起存储在单独的存储库中。如果设置了环境变量,则加载配置。

于 2012-06-07T06:30:21.160 回答
3

您还可以使用 NOCOMMIT 钩子(来自gitty):

将此设置为预提交挂钩

if git diff --cached | grep NOCOMMIT > /dev/null; then
echo "You tried to commit a line containing NOCOMMIT"
  exit 1
fi
exit 0

这将阻止提交,如果它包含NOCOMMIT.

您当然可以直接在钩子中替换NOCOMMITby 。Debug=True

于 2012-06-06T13:51:16.787 回答