Git / Heroku-如何隐藏我的SECRET_KEY?


问题内容

我使用Python和Django创建了一个Heroku Web应用程序,ModuleNotFoundError: No module named 'dlist.secret_settings'在尝试执行此操作时,Heroku在命令“ git push heroku master”后给了我这个错误:

#settings.py
from .secret_settings import *  
# from secret_settings.py import * doesn't work for some reason.

这是secret_settings.py(与settings.py在同一文件夹中)包含的内容:

#secret_settings.py
SECRET_KEY = 'string here'

问题是,当我在本地服务器(即http://127.0.0.1:8000/)上测试我的Web应用程序时,此方法有效,但是当我将这些更改推送至Heroku时,此方法不起作用。正如您所看到的,我只想隐藏我的SECRET_KEY。我查看了其他建议,但似乎无法弄清楚,选择这种方法是因为它可以理解。非常沮丧。初学者友好的答案/步骤,我们将不胜感激。


问题答案:

我猜您已将Git配置为忽略secret_settings.py。这是我想到创建一个单独文件的唯一原因。

Heroku部署由Git驱动。由于secret_settings.py未被Git跟踪,因此不会被推送到Heroku。您可以将文件添加到您的存储库中,但这将使首先放置一个单独的未跟踪文件的目的无法实现。

解决方案是使用环境变量。这在Heroku上得到了很好的支持

settings.py文件中,如下设置您的SECRET_KEY用法os.getenv()

import os

SECRET_KEY = os.getenv('SECRET_KEY', 'Optional default value')

这告诉DjangoSECRET_KEY从名为的环境变量中加载设置SECRET_KEY。如果不存在这样的环境变量,它将退回到可选的默认值。在您的开发机器上,最好使用默认值。

最后,SECRET_KEY在Heroku上设置环境变量。您可以通过heroku config:set SECRET_KEY="YOUR_SECRET_KEY_VALUE"在开发计算机上运行或通过Heroku的基于Web的仪表板来执行此操作。

您的secret_settings.py文件不再需要。