【问题标题】:Django ignoring my DATABASE_ENGINE setting -- sometimesDjango 忽略我的 DATABASE_ENGINE 设置——有时
【发布时间】:2010-12-11 00:00:08
【问题描述】:

我有几个站点,每个站点都有一个不同的设置文件——并且具有不同的名称。所有变体设置都有花卉主题。我们必须将网站分开。

C:\Proj-Carnation> echo %DJANGO_SETTINGS_MODULE%
path.to.settings_carnation_win32

我们有许多不使用内置django-admin.py test 命令的测试程序,因为它们是由 Django 前端启动的大型批处理作业,并使用 Django ORM。我们需要使用django.db.connection.creation.create_test_db()方法来创建一个新的测试数据库。

我们使用这个测试程序已经有一段时间了。目前,它已停止工作。我们对代码结构进行了大量更改,升级到 Django 1.1.1 和 Python 2.6。都是可能的罪魁祸首。

当我运行 Python 时,我看到了这一点。

C:\Proj-Carnation> python
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from django.conf import settings
>>> settings.DATABASE_ENGINE
INSDIE django.db.__init__, settings.DATABASE_ENGINE=''
'sqlite3'
>>> import django.db
>>> django.db.connection
<django.db.backends.dummy.base.DatabaseWrapper object at 0x00EE88B0>

在导入django.db 期间,某些设置显然没有设置。我在django.db 中添加了一个打印语句(“INSIDE”拼写错误)。设置未设置。

最终,settings.DATABASE_ENGINE 变为 'sqlite3'。进一步来说,这种“最终”行为是意料之中的:settings 模块使用惰性加载器技术。

问题在于:连接——由不完整的设置构建——是dummy 数据库后端。然而,最终设置显示引擎为'sqlite3'

在另一个项目(“根”项目)中,没有问题。事情完美无缺。数据库设置创建正确的 sqlite3 后端实例。

那么,有什么不同呢?我难住了。环境设置或物理目录树是最重要的潜在问题。

在不工作的C:\Proj-Carnation中,PYTHONPATHC:\Proj-Carnation;C:\Proj-Root;C:\This;C:\That

在工作根项目C:\Proj-Carnation 中,PYTHONPATHC:\Proj-Root;C:\This;C:\That

我是否在“康乃馨”项目中寻找隐藏了根项目中某些内容的内容?遗憾的是,Carnation 项目只有几个文件,并且它们位于一个包 (local) 中,这确保它们的名称与根项目不同。

在 1.1.1 版本中是否有一些不同的 Django 初始化?例如,django.conf 中是否存在与 Python 2.6 和 Django 1.1.1 不兼容的内容?

是否有一些我忽略的相对导入问题?

【问题讨论】:

  • 也许我遗漏了一些东西,但与典型的 Django 项目相比,这一切似乎都非常复杂。您能否提供您的项目和应用程序的布局以及任何项目之间的关联描述?
  • @John Paulett:这是一个具有批处理后端作业的相关网站系列。所以比较复杂。

标签: python django configuration


【解决方案1】:

找到了。

当您的设置模块位于包中时,该包的顶级 __init__.py 成员无法导入任何类型的任何 Django 材料。

如果包含您的设置的顶级 __init__.py 具有 Django 导入,则该 Django 导入将(可能)在创建设置之前使用默认设置。

由于 Django 中的某些东西(例如数据库连接)是单例的,因此在读取设置时创建的东西是唯一可以存在的。

不要在包含设置模块的包中的__init__.py 中放入任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 2023-04-05
    • 2015-09-22
    • 2013-11-29
    • 2018-12-09
    • 1970-01-01
    • 2016-10-29
    • 2018-07-07
    相关资源
    最近更新 更多