メール アカウントをチェックし、メールをダウンロードして解析するカスタム コマンドがあります。それに関する詳細は、この問題には関係ありません。
シェルからこのコマンドを実行すると、次のようになります。
cd /project_dir
./manage.py check_mail
毎回元気に走っています。crontab 経由で同じコマンドを実行すると、おかしな DB エラーが返されます。
django.db.utils.DatabaseError: SSL error: sslv3 alert bad record mac
そして、コードのさまざまなポイントからその例外を返します。常に(非常に単純な)選択クエリから。
crontab エントリは非常に単純です。
*/5 * * * * cd /project_dir && ./manage.py check_mail
そして、上記のテストでログインしたのと同じユーザーによって実行されます。
サブプロセスからクエリを実行するときに、以前にPostgreSQLとDjangoでこの「SSLエラー」を見つけたので、次のように接続を閉じて新しい接続を強制的に作成することで解決しました。
from django.db import connection
connection.close()
しかし、この場合は役に立ちません。postgresql ログには多くの情報が追加されません。
2013-01-19 16:03:09 GMT LOG: SSL error: decryption failed or bad record mac
2013-01-19 16:03:09 GMT LOG: could not receive data from client: Connection reset by peer
2013-01-19 16:03:09 GMT LOG: unexpected EOF on client connection
Python 2.6 と Django 1.4 を使用しています。これは、これらのエラーの 1 つの (ほぼ) 完全なトレースバックですが、前述したように、常に同じクエリから発生するとは限りません。
File "/project_dir/appname/checkmail.py", line 527, in get_message
message = object.message_set.all().order_by('-time')[0]
File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/query.py", line 207, in __getitem__
return list(qs)[0]
File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/query.py", line 87, in __len__
self._result_cache.extend(self._iter)
File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/query.py", line 291, in iterator
for row in compiler.results_iter():
File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/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-1.4-py2.6.egg/django/db/models/sql/compiler.py", line 818, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute
return self.cursor.execute(query, args)
django.db.utils.DatabaseError: SSL error: sslv3 alert bad record mac
アイデアはありますか?