在生产服务器上,我想同步数据库。
如果我这样做了
django-admin.py syncdb
它会选择settings.py。但我有一个额外的settings-production.py,它继承了设置。
因此我想出了这个:
django-admin.py syncdb --settings=/path/to/settings_production
ImportError:无法导入设置 '/ path / to / settings_production'(是否打开 sys.path?):不支持按文件名导入。
我用谷歌搜索,发现有人有类似的问题here。但令我困惑的是,WSGI.py仅由Apache读取。不是我自己运行命令。那里的答案对我来说没有意义。
如何手动在sys.path中添加production_settings来运行syncdb? 非常感谢,
答案 0 :(得分:1)
首先确保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
;避免必须处理环境变量和导入路径,特别是如果你要改变小事。
这种方法有一些缺点;例如,我无法想象它非常便携,特别是如果你有多个环境(登台/测试/生产/开发),因为你有多个from _foo_ import *
语句,它可能导致问题,因为导入的顺序变得很重要;如果你忘了并留在一个流浪的settings_*.py
周围 - 例如测试环境也得到了dev文件,因为一些开发人员忘了将它从测试分支中删除。
对于更复杂的设置,更容易保留主settings.py
文件的完整副本;然后将DJANGO_SETTINGS_MODULE
指向这些文件的python路径。需要注意的是,您必须确保调整PYTHONPATH
以包含设置的位置。
有关更多提示,请参阅SplitSettings wiki entry。