首页 > 解决方案 > 除非 SECRET_KEY 在 SETTINGS.PY 中硬编码,否则 Django- 站点将无法工作

问题描述

我更改了 django 项目的 settings.py 以将 SECRET_KEY 作为环境变量加载:

SECRET_KEY = os.environ['SECRET_KEY']

然后我将变量存储在/etc/bash.bashrc

我设置DEBUG=False,然后重新启动 gunicorn,重新启动 nginx 并重新启动服务器。但是我的网站停止工作(502 Bad Gateway)!

这里到底有什么问题?我搜索了但我不太明白可能是什么问题。在此更改之前,该站点一直运行良好。

- -更新 - -

我通过使用 nano 打开 .bashrc 来存储变量:

sudo nano /etc/bash.bashrc

然后添加变量:

export SECRET_KEY='***'

----更新2-----

我使用分析了“gunicorn”状态

sudo systemctl status gunicorn

看看卡住了什么,正如预期的那样,它给了我这个:这是密钥的问题!

Mar 06 18:59:33 mymachine gunicorn[15556]:   File "/home/mymachine/mymachine/site/settings.py", line 24, in <module>
**Mar 06 18:59:33 mymachine gunicorn[15556]:     SECRET_KEY = os.environ['SECRET_KEY']
Mar 06 18:59:33 mymachine gunicorn[15556]:   File "/home/atlass/bb_1/bb_0_venv/lib/python3.6/os.py", line 669, in __getitem__
Mar 06 18:59:33 mymachine gunicorn[15556]:     raise KeyError(key) from None**
Mar 06 18:59:33 mymachine gunicorn[15556]: KeyError: 'SECRET_KEY'
Mar 06 18:59:33 mymachine gunicorn[15556]: [2021-03-06 18:59:33 +0000] [15581] [INFO] Worker exiting (pid: 15581)
Mar 06 18:59:33 mymachine gunicorn[15556]: [2021-03-06 18:59:33 +0000] [15556] [INFO] Shutting down: Master
Mar 06 18:59:33 mymachine gunicorn[15556]: [2021-03-06 18:59:33 +0000] [15556] [INFO] Reason: Worker failed to boot.
Mar 06 18:59:33 mymachine systemd[1]: gunicorn.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED
Mar 06 18:59:33 mymachine systemd[1]: gunicorn.service: Failed with result 'exit-code'.

---更新3----

所以这变成了..一个简单的恶心和嘲弄的任务:/原来密钥本身有问题,我可以用python得到它并打印它,但它不会在django中导入!

有什么帮助吗??

标签: pythondjangobash

解决方案


好的,我设法让它工作,所以这是我在“settings.py”中所做的:

from django.utils.encoding import force_bytes, force_str

SECRET_KEY = force_str(os.environ.get('SECRET_KEY'))

注意我添加到代码中的 force_str();我在这里找到了它: https ://docs.djangoproject.com/en/3.1/ref/utils/#django.utils.encoding.force_str

我通过在我的 /etc/environment 中设置它来添加变量,就像@JL Peyret 建议的那样。

我还应该提到我卸载了 gunicorn 然后重新安装了它,但我不知道这是否有任何帮助。


推荐阅读