【问题标题】:Django: environment variable for SECRET_KEY not workingDjango:SECRET_KEY 的环境变量不起作用
【发布时间】:2016-02-05 22:20:43
【问题描述】:

我的prod.py 中有SECRET_KEY = os.environ['SECRET_KEY'],我的.bashrc 中有SECRET_KEY=secret_string

这将导致 502 错误,但如果我设置 SECRET_KEY="secret_string",它就可以工作。如何使用环境变量来做到这一点?

我正在通过 sudo service gunicorn restart 启动 gunicorn,并且我有一个 upstart 脚本。

这是cat /proc/<PID>/environ的输出:

PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin^@TERM=linux^@UPSTART_JOB=gunicorn^@UPSTART_INSTANCE=^@

【问题讨论】:

    标签: django


    【解决方案1】:

    你需要做的:

    export SECRET_KEY=secret_string
    

    在您的.bashrc 中。如果你这样做:

    SECRET_KEY=secret_string
    

    它只在当前进程中可用,但是当你运行 django server/shell 时,子进程不知道这个变量。 export 使变量在子进程中也可用。

    【讨论】:

    • 我添加了export,然后添加了source.bashrc,但是当我重新启动gunicorn时它仍然无法正常工作。
    • @sac7e: .bashrc 仅影响 bash 登录 shell。你是从你的外壳开始 gunicorn 吗?
    • 另外,您是否定义了DJANGO_SETTINGS_MODULE 环境变量? docs.djangoproject.com/en/1.9/topics/settings/…
    • @sac7e:但是如何你是(重新)启动 gunicorn 吗?如果您使用的是 systemd 之类的东西,则不会传递环境变量。检查/proc/<gunicorn-pid>/environ并将其添加到您的问题中
    • @ShangWang:我认为是在wsgi.py中定义的,os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.prod")
    【解决方案2】:

    .bashrc 仅影响 bash 登录 shell。初始化脚本不受任何影响。

    您应该将export SECRET_KEY=... 行复制到初始化脚本的顶部。

    【讨论】:

    • 添加export SECRET_KEY=... 是解决此问题的唯一方法吗?如果我使用django-environ,我怎么能export.env 中的环境变量到初始化脚本。另一个问题,由于/proc/<PID>/environ 中没有“DJANGO_SETTINGS_MODULE”,gunicorn 进程如何知道设置文件的位置?我认为唯一的解释是 wsgi.py 中的os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.prod")。你怎么看?
    • 是的,setdefault() 是解释。使用export SECRET_KEY 不是唯一的方法(我不推荐它:environment variables should not contain secrets,因为它们可能会泄漏)。我通常将我的密钥和我的数据库凭据存储在localsettings.py 文件中。此文件未版本化(被 git 忽略),由我的主要 DJANGO_SETTINGS_MODULE 导入
    • 我仍然更喜欢环境变量,我找到了另一种方法:就像 wsgi.py 中的 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.prod") 一样,我在我的 repo 中定义 .env 并在设置文件中解析它。无论如何,非常感谢。
    猜你喜欢
    • 2021-11-13
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2015-09-27
    • 2020-10-04
    • 2021-03-30
    相关资源
    最近更新 更多