我不明白让config.py隐藏我的密钥是什么意思? [重复]

问题描述 投票:2回答:2

这个问题在这里已有答案:

我正在尝试将我的烧瓶应用程序部署到heroku上。对于我的应用程序,我在存储库中有一些常量变量和WTForms的密钥。这些值存储在路径目录中的config.py中,我的app.py文件将它们从app.config.from_object('config')读取到应用程序中。如果没有这些变量和值,我的应用程序当然会中断。

我不明白把事情移到config.py上是有道理的。我必须将其推送到我的存储库以便heroku注册该文件,但如果我将其推送到github,那么每个人都会看到我的密钥。我应该将config.py放到.gitignore上吗?

- - - - - - -编辑 - - - - - - -

在阅读了Explore Flask关于环境变量配置的重要资源后,我担心我仍然没有得到它。让我详细说明一下。

我的应用程序绝对拒绝在Heroku上工作,我怀疑这是因为我的blackduck_directory/instance/config.py文件。由于某种原因,此文件未上载。以下是heroku日志中的错误:

IOError: [Errno 2] Unable to load configuration file (No such file or directory): '/app/instance/config.py'

这条线下面是这样的:

at=error code=H13 desc="Connection closed without response" method=GET path="/" host=desolate-reaches-7133.herokuapp.com request_id=042226dc-5879-456a-8289-7c0f78c4e482 fwd="73.149.18.19" dyno=web.1 connect=1ms service=27430ms status=503 bytes=0

这是我的app结构:

enter image description here

这是我的blackduck_directory.py代码,它加载了两个config.py

app = Flask(__name__)
app.config.from_object('config')
app.config.from_pyfile('instance/config.py')
db = SQLAlchemy(app)
file_path = os.path.join(os.path.dirname(__file__), 'static/images')

if __name__ == '__main__':
    # REMEMBER: Never have this set to True on Production
    # manager.run()
    app.run()

这在技术上是不正确的,但这适用于localhostheroku local,但不适用于生产。

我试过像这样配置blackduck_directory.py文件:

尝试#1

app = Flask(__name__, instance_path='/blackduck_directory/instance')
app.config.from_object('config')
app.config.from_pyfile('config.py')

尝试#2:

app = Flask(__name__, instance_path='/instance')
app.config.from_object('config')
app.config.from_pyfile('config.py')

和各种组合.......包括qazxsw poi

我的智慧结束了。我不明白问题是什么。我的instance_relative_config=True有这个错误吗?我的树结构错了吗?我错过了什么?我在blackduck_directory.py上隐藏了/instance/config.py文件。我明白它应该是隐藏的,但是如果它隐藏在github上,Heroku应该找到它到底是怎么回事?这么多问题........请帮助。

python heroku flask
2个回答
1
投票

罗伯特皮卡德在他的书.gitignore中提出了以下配置方式。

假设您有一个具有以下结构的项目:

Explore Flask

您将包含敏感信息(如API密钥,密码)的所有数据放在config.py requirements.txt run.py instance/ config.py yourapp/ __init__.py models.py views.py templates/ static/ 中,并从源代码管理中排除此目录。

要从两个文件加载配置变量,您可以使用以下代码:

instance/config.py

有关配置的更多信息,请访问app = Flask(__name__, instance_relative_config=True) app.config.from_object('config') app.config.from_pyfile('config.py')


0
投票

有许多方法可以从应用程序代码中分离出秘密。将它们放入不属于存储库的config.py文件中是一种简单的方法,但它远非最好的方法。它也有点乏味,因为通常有其他配置不是秘密,应该添加到源代码中。此外,如果另一个开发人员提取您的代码并尝试在开发环境中使用它,您希望它们具有所有必要的配置。

我的公司所做的是我们使用每个环境的主密码加密我们的密码和证书,并使用我们所有其他配置检查它们。然后,当它进入生产时,我们将主密码作为系统属性传递给启动服务器的命令,或者将主密码放在服务器文件系统的某个位置。

© www.soinside.com 2019 - 2024. All rights reserved.