2

最新のdjango svnを使用してpython 2.6でimaplibを使用すると問題が発生します。imap メールをキューにダウンロードしたい (celeryd を使用)。コマンドラインからメールを接続/ダウンロードできますが、django を介してタスクを celeryd にオフロードすると、次のエラーが表示されます: "SSLError: [Errno 1] _ssl.c:1325: error:1408F10B:SSL routines:SSL3_GET_RECORD :間違ったバージョン番号".

Imaplib のドキュメントには、SSL のバージョンを指定する方法が記載されていません。gmailからメールを取り込もうとしています。celeryd を使用してタスクをキューにオフロードすると、タスクが失敗する理由がわかりません。どんな助けでも大歓迎です。

編集:ここにスタックトレースがあります:

ファイル "/usr/lib/python2.6/imaplib.py"、643 行目、select typ、dat = self._simple_command(name, mailbox)

ファイル "/usr/lib/python2.6/imaplib.py"、1059 行目、_simple_command で self._command_complete(name, self._command(name, *args)) を返す

ファイル "/usr/lib/python2.6/imaplib.py"、889 行目、_command_complete typ、データ = self._get_tagged_response(tag)

ファイル "/usr/lib/python2.6/imaplib.py"、990 行目、_get_tagged_response self._get_response() 内

ファイル "/usr/lib/python2.6/imaplib.py"、907 行目、_get_response resp = self._get_line() 内

ファイル "/usr/lib/python2.6/imaplib.py"、1000 行目、_get_line 行 = self.readline()

ファイル「/usr/lib/python2.6/imaplib.py」、1170行目、readline char = self.sslobj.read(1)

ファイル "/usr/lib/python2.6/ssl.py"、136 行目、読み取りで self._sslobj.read(len) を返す

SSLError: [Errno 1] _ssl.c:1325: error:1408F10B:SSL ルーチン:SSL3_GET_RECORD:間違ったバージョン番号

編集:これは私が実行しようとしているタスクです。ここで、imap_parser は imaplib をラップし、電子メールをデータベースにロードするモジュールです。

class DumpIMAPData(Task):
    def run(self, user, username, password, imap_address, **kwargs):
        logger = self.get_logger(**kwargs)
        celery.log.redirect_stdouts_to_logger(logger, loglevel=None)
        #imap_address is e.g. 'imap.gmail.com'                                  
        parser = imap_parser.IMAPFetcher(imap_address, username, password, user\
)
        parser.load_all_emails()
    return True

--detach フラグを使用してタスクをデーモン化しない限り、タスクが実際にセロリを使用して実行されることに気付きました。タスクがデーモンとして実行された場合にのみ失敗する理由がわかりません。-u フラグと -g フラグを使用して同じユーザー ID とグループ ID を設定し、同じ umask を設定し、パスと作業ディレクトリがデーモンと非デーモン化バージョンの両方で同じであることを確認しましたが、タスクはまだ実行されません。セロリがデーモンとして実行されている場合のセロリ。

セロリの最新バージョン(0.9.4)を使用しています。

4

3 に答える 3

1

セロリワーカー内で実行したときにのみ破損する場合は、amqplib(sslモジュールを使用)を使用したものか、マルチプロセッシングとフォーク(フォークの前に初期化されたグローバル変数が機能しなくなった)を使用したものである可能性があります。

実行しようとしているタスクを含めていただけますか?タスク自体の内部でサーバーに接続しますか、それともある種の共有オブジェクトですか?

于 2010-01-08T11:03:48.850 に答える
1

celeryd の作成者によると:

Celery は、01a8a0e の時点で、独自のデタッチを行わなくなりました。これには非常に多くの問題があり、start-stop-daemon、supervisord、launchd などを使用してデタッチするときに機能するため、代わりにこれらのツールを使用することをお勧めします。

于 2010-01-23T22:27:14.913 に答える
0

TLS を使用していないポートに接続しています。TLS/SSL 対応のメール サーバーと通信しようとしていますか、それともセロリが AMQP 接続に TLS を使用しようとしていますか?

于 2010-01-06T21:51:47.763 に答える