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
文件不再需要。