0

我正在尝试调用一个 python 函数,该函数从 GNU mailman 对我的 django 数据库进行一些查询。

当邮递员尝试传递消息时,它会导入我的 python 脚本。它稍后会在我的脚本中调用一个函数来修改消息对象。我得到的错误是:

ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation \
for more details.

这是我在文件顶部配置设置的方式:

from django.core.management import setup_environ
from mysite import settings
setup_environ(settings)

当我运行 python manage.py syncdb 时,它似乎可以很好地创建数据库。这是我的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.   
        'NAME': 'django_db',                      # Or path to database file if using sqlite3.            
        'USER': 'root',                      # Not used with sqlite3.                                         
        'PASSWORD': 'root',                  # Not used with sqlite3.                                         
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.          
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.            
    }
}

此外,我已经注释掉了我的整个函数,现在它看起来像:

def f():
    return

所以我认为这与函数调用无关。

此外,我已经在 python 控制台中测试了 setup_environ 行,一切都按预期工作。

此外,当我重新启动 GNU mailman 时,我相信它必须加载所有脚本,这意味着它必须导入我的文件。这意味着当我重新启动 mailman 时,这些“setup_environ”行会运行。很好——我没有错误。

只有当 GNU mailman 尝试传递消息时,我才会遇到问题。

所以我很困惑。我确实将 mailman restart 命令作为 sudo 运行,并带有额外的 PYTHONPATH 和 DJANGO_SETTINGS_MODULE 环境变量,但是我已经手动将相关部分添加到我的 sys.path 和 os.environ dict,这也不能解决问题。此外,该错误并不表明它是路径问题或无法找到设置模块。

完整的堆栈跟踪是:

Jun 04 12:06:11 2012 (5249) Uncaught runner exception: settings.DATABASES is improperly configured. Please supply the ENGINE val\
ue. Check settings documentation for more details.
Jun 04 12:06:11 2012 (5249) Traceback (most recent call last):
  File "/var/lib/mailman/Mailman/Queue/Runner.py", line 100, in _oneloop
    msg, msgdata = self._switchboard.dequeue(filebase)
  File "/var/lib/mailman/Mailman/Queue/Switchboard.py", line 173, in dequeue
    redirect_list(msg, data)
  File "/home/ubuntu/djcode/mysite/mysite/apps/mailman/redirect.py", line 32, in redirect_list

  File "/home/ubuntu/djcode/mysite/mysite/apps/mailman/redirect.py", line 45, in _get_real_listname
    from mysite.apps.common.models import CustomUser
  File "/home/ubuntu/djcode/mysite/mysite/apps/common/custom_user_manager.py", line 54, in get
    email_object = Email.objects.get(email=kwargs['email'])
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 131, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 361, in get
    num = len(clone)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 85, in __len__
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 291, in iterator
    for row in compiler.results_iter():
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 763, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 808, in execute_sql
    sql, params = self.as_sql()
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 71, in as_sql
    out_cols = self.get_columns(with_col_aliases)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 218, in get_columns
    col_aliases)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 306, in get_default_columns
    r = '%s.%s' % (qn(alias), qn2(field.column))
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 49, in quote_name_unless_alias
    r = self.connection.ops.quote_name(name)
  File "/usr/local/lib/python2.6/dist-packages/django/db/backends/dummy/base.py", line 15, in complain
    raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation \
for more details.
4

1 回答 1

1

似乎您没有在 setting.py 文件的 DATABASES 字典中指定任何内容。指定以下内容以成功连接到数据库(根据docs),

1)引擎——“django.db.backends.postgresql_psycopg2”、“django.db.backends.mysql”、“django.db.backends.sqlite3”或“django.db.backends.oracle”。其他后端也可用。

2) NAME -- 数据库的名称。如果您使用 SQLite,数据库将是您计算机上的一个文件;在这种情况下,NAME 应该是该文件的完整绝对路径,包括文件名。如果该文件不存在,则在您第一次同步数据库时会自动创建(见下文)。

3) USER -- 您的数据库用户名(不用于 SQLite)。

4) PASSWORD -- 您的数据库密码(不用于 SQLite)。

5) HOST——你的数据库所在的主机。如果您的数据库服务器位于同一台物理机器上(不用于 SQLite),则将此保留为空字符串。

(或) 点击这里

于 2012-06-04T13:49:49.683 回答