0

GNU mailman から django データベースにクエリを実行する python 関数を呼び出そうとしています。

mailman がメッセージを配信しようとすると、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 がメッセージを配信しようとするときだけです。

だから私はかなり困惑しています。追加の PYTHONPATH および DJANGO_SETTINGS_MODULE 環境変数を使用してmailman restart コマンドを sudo として実行しますが、関連する部分を 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

settings.pyファイルのDATABASESディクショナリに何も指定していないようです。databseに正常に接続するには、次のように指定してください(ドキュメントに従って)。

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)パスワード-データベースのパスワード(SQLiteでは使用されません)。

5)HOST-データベースが存在するホスト。データベースサーバーが同じ物理マシン上にある場合(SQLiteでは使用されない場合)、これを空の文字列のままにします。

(または)ここをクリックしてください

于 2012-06-04T13:49:49.683 に答える