【发布时间】:2019-09-24 10:26:03
【问题描述】:
我正在为我的第一个专业 Django 项目的生产做准备,但在保护应用程序的环境变量方面遇到了问题。到目前为止,我已经成功创建了一个本地文件来将所有变量存储在我的电脑上......
env_variables.py
import os
db_user = os.environ.get('db_user')
db_password = os.environ.get('db_password')
# AWS DJANGO
export AWS_ACCESS_KEY_ID = "access_key"
export AWS_SECRET_ACCESS_KEY = "secret_key"
export AWS_STORAGE_BUCKET_NAME = "bucket_name"
print(db_user)
print(db_password)
我使用环境设置(windows)来创建用户名和密码。当我运行文件时,它们工作。我正在使用我的 AWS 凭证对此进行测试。我一直认为 Django 可以访问这些信息,无论它在我的本地电脑上的什么位置。如果我错了,请纠正我。
settings.py
...
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
...
我知道 Django 没有访问此文件,因为我的所有媒体文件都获得了 400,但是当我将密钥直接放入 settings.py 文件时它可以工作。我相信我在这里遗漏了几个步骤。我见过其他 python 编码器能够做到这一点,而不必使用 django-environ 或其他包之类的东西。如果有人可以提供帮助,将不胜感激,因为我想为我的所有项目都这样做。
编辑
我的 Procfile 的 gunicorn 是 web: gunicorn project_name.wsgi
我没有修改我的 wsgi 文件。
【问题讨论】:
-
运行该文件不可能工作,因为它是 Python 和 bash 语法的混合体,并且在两者中都无效。
-
你的 settings.py 文件没问题。正如@DanielRoseman 所说,您是 env_variables.py 文件没有意义。问题是如何设置环境变量。通常你会激活一个 virtualenv,并使用一个守护进程在该 virtualenv 中运行 gunicorn 或 uwsgi,并将这些特定的环境变量设置为你需要的值。例如如果您使用 systemd 启动 gunicorn,则在配置文件的
[Service]部分中传递Environment设置。 -
所以你应该用你如何运行 Django (gunicorn/uwsgi) 以及如何配置来扩展你的问题。
-
当我在终端中运行“python env_vars.py”时,它会打印我的用户名和密码。我在这里是不是偶然混合了学科?
-
是否需要将所有机密文件放在 .py 文件中?如果没有,您可以使用 python-dotenv 从 .env 文件加载环境变量。将一个简单的脚本添加到您的 manage.py 和 wsgi.py 中,您就可以让它在 django 上运行。
标签: python django environment-variables