【问题标题】:Django- site won't work unless the SECRET_KEY is hardcoded in SETTINGS.PY除非 SECRET_KEY 在 SETTINGS.PY 中硬编码,否则 Django 站点将无法工作
【发布时间】:2021-06-04 23:43:04
【问题描述】:

我更改了 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----

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

有什么帮助吗??

【问题讨论】:

  • 在将变量添加到 bash.bashrc 后,你有没有 source /etc/bash.bashrc
  • @shiva 不,但我现在做到了。错误仍然存​​在
  • 您究竟是如何存储变量的,以及当您在 bash 中运行 env 时向我们展示了什么。
  • 你可以试试 /etc/environment 看看是否适合你。
  • 您的个人环境将反映到系统作业中。看看serverfault.com/questions/413397/…

标签: python django bash


【解决方案1】:

好的,我设法让它工作,所以这是我在“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 然后重新安装了它,但我不知道这是否有任何帮助。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2021-12-08
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2021-05-19
    • 2011-04-09
    相关资源
    最近更新 更多