【发布时间】:2017-08-21 03:02:21
【问题描述】:
这是我在 virtualenv 处于活动状态时尝试运行 makemigrations 命令时遇到的以下错误:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 307, in execute
settings.INSTALLED_APPS
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/conf/__init__.py", line 41, in _setup
self._wrapped = Settings(settings_module)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/conf/__init__.py", line 110, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/home/tony/vp/vpenv/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 665, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/home/tony/vp/vp/config/settings/production.py", line 1, in <module>
from .base import *
File "/home/tony/vp/vp/config/settings/base.py", line 22, in <module>
SECRET_KEY = os.environ["VP_SECRET_KEY"]
File "/home/tony/vp/vpenv/lib/python3.5/os.py", line 725, in __getitem__
raise KeyError(key) from None
KeyError: 'VP_SECRET_KEY'
我在三个位置设置了我的环境变量:
在我的虚拟环境 bin/activate 脚本中:
Environment=VP_SECRET_KEY="****"
Environment=VP_DB_PASS="****"
在 .bashrc 文件中:
VP_SECRET_KEY="****"
VP_DB_PASS="****"
在我的 gunicorn.service 文件中:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=tony
Environment=VP_SECRET_KEY="****"
Environment=VP_DB_PASS="****"
Group=www-data
WorkingDirectory=/home/tony/vp/vp/
ExecStart=/home/tony/vp/vpenv/bin/gunicorn --workers 3 --bind unix:/home/tony/vp/vp/vp.sock vp.wsgi:application
[Install]
WantedBy=multi-user.target
这是我在 settings base.py 中导入它的方法(我使用多个设置文件):
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ["VP_SECRET_KEY"]
当我使用 $VP_SECRET_KEY 回显它们时,我确实得到了返回的值。
什么会导致这个问题?是不是通过将它们设置在多个位置会产生某种冲突?
【问题讨论】:
-
为什么不简单地将
SECRET_KEY =添加到local_settings.py并将其导入settings.py?当然你需要将local_settings.py添加到.gitignore -
我的所有设置文件(base.py、production.py、local.py)都受版本控制。出于安全原因,我不希望我的密钥在其中任何一个中可见。如果这就是你的意思:P
-
好的,创建新的例如
secret.py将它添加到.gitignore,为什么不呢? -
感谢@BearBrown,但我尝试做的事情得到了 Tarun Lalwani 在他的回答中的回答!不过谢谢!
-
完全没有,如你所愿)
标签: django postgresql nginx environment-variables gunicorn