Django 如何在sys.path中手动添加生产设置以运行syncdb?
在生产服务器上,我想同步数据库 如果我这么做了Django 如何在sys.path中手动添加生产设置以运行syncdb?,django,Django,在生产服务器上,我想同步数据库 如果我这么做了 django-admin.py syncdb它将选择settings.py。但是我有一个额外的settings-production.py,它继承了settings中的cs 因此,我提出了以下建议: django-admin.py syncdb --settings=/path/to/settings_production 导入错误:无法导入设置 “/path/to/settings_production”(是否打开 sys.path?:不支持按
django-admin.py syncdb
它将选择settings.py。但是我有一个额外的settings-production.py,它继承了settings中的cs
因此,我提出了以下建议:
django-admin.py syncdb --settings=/path/to/settings_production
导入错误:无法导入设置
“/path/to/settings_production”(是否打开
sys.path?:不支持按文件名导入
我在谷歌上搜索,发现有人有类似的问题。然而,让我困惑的是,WSGI.py仅由Apache读取。如果我亲自执行命令就不会了。那里的答案对我来说真的没有意义
如何在sys.path中手动添加生产设置以运行syncdb?
非常感谢,首先确保settings\u production.py
与settings.py
位于同一目录中
由于您是从设置继承的,因此可以在settings.py
的底部添加:
try:
from settings_production import *
except ImportError:
pass
如果只想使用settings\u production.py
请确保它具有应用程序(数据库等)的所有设置,然后:
DJANGO\u SETTINGS\u MODULE=SETTINGS\u production python manage.py syncdb
编辑
我本来打算把它作为一条评论发布,但它太长了:
我这样做是因为通常在生产环境中,one只更改可以在mastersettings.py中导入的几个值;并且使用变量的最后一个值(因此,如果在设置\u production.py
中设置生产数据库,则使用该设置)
这种方法更简单,因为django默认情况下会查找settings.py
;避免处理环境变量和导入路径,尤其是在更改次要内容时
这种方法有一些缺点;例如,我无法想象它的可移植性,特别是如果您有多个环境(staging/testing/production/dev),那么您有多个from\u foo\u import*
语句,并且由于导入顺序变得重要,因此可能会导致问题;如果您忘记并保留了一个零散的settings.*.py
文件,例如,测试环境也获得了dev文件,因为一些开发人员忘记将其从测试分支中删除
对于更复杂的设置,更容易保存主settings.py
文件的完整副本;然后将DJANGO\u SETTINGS\u MODULE
指向这些文件的python路径。这里需要注意的是,您必须确保调整了PYTHONPATH
,以包括设置的位置
有关更多想法,请参阅。谢谢Burhan,根据“为生产使用不同设置”下的说明,正是设置_Production.py从设置导入
从设置导入*您似乎用另一种方式导入,不是吗?