6

gunicorn 経由で RDS (AWS mysql) に django を実行すると、gunicorn ログに次のエラーが表示されます。

Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x690ecd0>> ignored

まだ確実に再現することはできませんし、原因となっている根本的なコードを突き止めることもできません。

このパターンに従って、いくつかの場所で生のカーソルを使用しています。

cursor = connections['read_only'].cursor()
sql = "select username from auth_user;"
cursor.execute(sql)
rows = cursor.fetchall()
usernames = []
for row in rows:
    usernames.append(row[0])

いくつかの場所では、カーソルをすぐに別のクエリ execute() / fetchall() パターンに再利用します。時々私はしません。

また、生のマネージャー クエリを使用する場所もあります。

カーソルを明示的に閉じているわけではありませんが、そうすべきだとは思いません。

それ以外:ストアドプロシージャ、init_commandパラメーター、またはここに投稿された他の回答に示されているものは使用していません。

デバッグ方法に関するアイデアや提案をいただければ幸いです。

4

1 に答える 1

-3

https://code.djangoproject.com/ticket/17289をチェックしてください

次のようなことをする必要があります:

while cursor.nextset() is not None:
    if verbose:                                                        
        print "rows modified %s" % cursor.rowcount
于 2013-03-28T22:22:24.407 に答える