我正在使用本地和生产设置的不同文件设置Django项目。我可以确认我的Django秘密密钥已成功在virtualenv的环境变量中,当我运行服务器时,我没有收到任何错误。但是当我尝试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')


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

uan

最佳答案

我不确定为什么runserver命令在syncdb不能运行的情况下仍能运行,但是您可以通过为DJANGO_SETTINGS_MODULE添加环境变量来解决它,方法与对SECRET_KEY进行的操作相同。唯一的区别是您无需在任何地方的Django代码中引用DJANGO_SETTINGS_MODULE。我正以这种方式运行自己的安装程序,遇到的唯一问题是在项目之间切换时忘记更改设置模块:-)

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

希望能有所帮助

关于django - 我的Django secret key 在环境变量中,但我无法执行syncdb,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19681102/

10-09 00:22