我的Django密钥是在一个环境变量,但我不能做syncdb

时间:2013-10-30 11:35:08

标签: django virtualenv

我正在设置一个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')

任何帮助调试此内容都将非常感激。

尤安

2 个答案:

答案 0 :(得分:1)

我不确定为什么runserver命令在syncdb不工作时正在运行,但是您可以通过添加DJANGO_SETTINGS_MODULE的环境变量来对其进行排序,方法与您对SECRET_KEY的方式相同。唯一的区别是你不需要在任何地方引用django代码中的DJANGO_SETTINGS_MODULE。我正在以这种方式运行我自己的设置,我遇到的唯一问题是当我在项目之间切换时忘记更改设置模块: - )

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

希望有所帮助

答案 1 :(得分: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")