我正在设置一个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')
任何帮助调试此内容都将非常感激。
尤安
答案 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")