3

我正在设置一个 Django 项目,其中包含用于本地和生产设置的不同文件。我可以确认我的 Django 密钥在 virtualenv 的环境变量中成功,当我执行 runserver 时,我没有收到任何错误。但是,当我尝试 manage.py syncdb 我得到

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

我不明白为什么我可以在 runserver 之后成功浏览到该站点,但我无法同步数据库。当我运行 env 时,我可以看到密钥在那里,并且在我的基本设置文件中(导入到本地设置中)我正在这样做:

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

任何调试此问题的帮助将不胜感激。

尤安

4

2 回答 2

1

我不确定为什么 runserver 命令在 syncdb 不工作时工作,但您可以通过为 DJANGO_SETTINGS_MODULE 添加环境变量来解决它,就像为 SECRET_KEY 所做的那样。唯一的区别是您不需要在任何地方的 django 代码中引用 DJANGO_SETTINGS_MODULE。我正在以这种方式运行自己的设置,我遇到的唯一问题是在项目之间切换时忘记更改设置模块:-)

编辑:我没有意识到您正在将 --settings=myapp.settings.local 添加runserversyncdb. 您需要这样做的原因是您使用的设置与默认路径不同,因此 python 无法找到它们。此外,尽管您在 wsgi 文件中设置了 DJANGO_SETTINGS_MODULE,但这仅在通过您的网络服务器访问该站点时才会触发。运行管理命令时,忽略 wsgi 文件(AFAIK),因此以与 SECRET_KEY 相同的方式将 DJANGO_SETTINGS_MODULE 添加到环境变量中,使您的设置文件可用于管理命令。

希望有帮助

于 2013-10-30T12:29:06.403 回答
0

这里有点类似的情况,使用 virtualenv 运行涉及 django 模型的外部脚本。

要完成这项工作,请确保:您的sys.path列表包含指向您的 virtualenv 站点包的路径。对我来说是:sys.path.append('/home/user/.virtualenvs/Project/local/lib/python2.7/site-packages')

您的 django 设置变量已添加到os.environ. 例如:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings")

于 2015-04-19T15:29:24.657 回答