我使用Python和Django创建一个Heroku网络应用程序,Heroku在命令'git push heroku master'后给我这个错误:ModuleNotFoundError: No module named 'dlist.secret_settings'
在尝试这样做时:
#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。您可以将文件添加到存储库中,但这样做会破坏首先使用单独的未跟踪文件的目的。
解决方案是使用environment variable。这是well-supported on Heroku。
在你的settings.py
文件中,使用SECRET_KEY
设置你的os.getenv()
,如下所示:
import os
SECRET_KEY = os.getenv('SECRET_KEY', 'Optional default value')
这告诉Django从一个名为SECRET_KEY
的环境变量中加载你的SECRET_KEY
设置。如果不存在此类环境变量,则它将回退到可选的默认值。在您的开发机器上,使用默认值可能很好。
最后,在Heroku上设置SECRET_KEY
环境变量。您可以通过在开发计算机上运行heroku config:set SECRET_KEY="YOUR_SECRET_KEY_VALUE"
或通过Heroku的基于Web的仪表板来完成此操作。
您的secret_settings.py
文件不再需要。