如何手动将我的production_settings添加到sys.path以运行syncdb?
在生产服务器上,我想同步数据库。如何手动将我的production_settings添加到sys.path以运行syncdb?
如果我只是做了该
django-admin.py syncdb
会挑settings.py。但我有一个额外的settings-production.py从设置继承。
因此,我想出了这个:
django-admin.py syncdb --settings=/path/to/settings_production
ImportError: Could not import settings '/path/to/settings_production' (Is it on sys.path?): Import by filename is not supported.
我用Google搜索,发现有人有类似的问题here。然而令我困惑的是,WSGI.py只能被Apache读取。不是,如果我自己运行命令。那里的答案对我来说并不合适。
如何手动在sys.path中添加我的production_settings以运行syncdb? 非常感谢,
首先确保settings_production.py
与settings.py
位于同一个目录中。
因为你是从设置继承,你可以在settings.py
底部添加:
try:
from settings_production import *
except ImportError:
pass
如果你想只使用settings_production.py
确保它拥有所有的设置为您的应用(数据库,等人)然后:
DJANGO_SETTINGS_MODULE=settings_production python manage.py syncdb
编辑
我要发布它作为一个评论,但它变得太长:
我就是这么做的,因为通常在制作一个只改变,你可以在主settings.py
导入几个值;并使用变量的最后一个值(因此如果您在settings_production.py
中设置生产数据库,则使用该设置)。
这样更简单,因为django默认会查找settings.py
;避免必须处理环境变量和导入路径,特别是如果你正在改变小事情。
这种方法有一些缺点;例如我无法想象它的便携性,特别是如果您有多个环境(staging/testing/production/dev),那么您有多个from _foo_ import *
语句,并且可能导致问题,因为导入的顺序变得很重要;如果你忘记了并且围绕着一个流氓settings_*.py
左右 - 例如测试环境也得到了dev文件,因为有些开发人员忘了将它从测试分支中删除。
对于更复杂的设置,其更容易保留完整副本的主文件settings.py
;然后将DJANGO_SETTINGS_MODULE
指向这些文件的Python路径。这里需要注意的是,您必须确保PYTHONPATH
已调整为包含您的设置的位置。请参阅SplitSettings wiki entry。
感谢Burhan,根据http://djangobook.com/en/2.0/chapter12/下的使用不同的生产设置,它是settings_production.py,从设置导入的设置导入*'你似乎这样做其他方式,不是吗? – Houman 2012-08-06 13:47:44