0

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

如果我只是那样做

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 上?):不支持按文件名导入。

我用谷歌搜索,发现有人在这里遇到了类似的问题。然而让我感到困惑的是,WSGI.py 只能由 Apache 读取。如果我自己运行命令,则不会。那里的答案对我来说真的没有意义。

如何在 sys.path 中手动添加我的 production_settings 以运行 syncdb?非常感谢,

4

1 回答 1

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

编辑

我打算将它作为评论发布,但它变得太长了:

我这样做是因为通常在生产中只更改可以在 master 中导入的几个值settings.py;并使用变量的最后一个值(因此,如果您在 中设置生产数据库settings_production.py,则使用该设置)。

这种方式更容易,因为 django 默认会查找settings.py; 避免必须处理环境变量和导入路径,尤其是在您更改次要内容时。

这种方法有一些缺点;例如,我无法想象它非常便携,特别是如果您有多个环境(暂存/测试/生产/开发),那么您有多个from _foo_ import *语句,并且由于导入的顺序变得很重要,它可能会导致问题;如果您忘记并一直在附近settings_*.py徘徊-例如,测试环境也获得了开发文件,因为某些开发人员忘记将其从测试分支中删除。

对于更复杂的设置,更容易保留主文件的完整副本;settings.py然后指向DJANGO_SETTINGS_MODULE这些文件的python路径。这里需要注意的是,您必须确保PYTHONPATH进行了调整以包含您的设置位置。

有关更多想法,请参阅SplitSettings wiki 条目

于 2012-08-06T13:11:27.423 回答