如何手动在sys.path中添加production_settings以运行syncdb?

时间:2012-08-06 12:56:38

标签: django

在生产服务器上,我想同步数据库。

如果我这样做了

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? 非常感谢,

1 个答案:

答案 0 :(得分:1)

首先确保settings_production.pysettings.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