そこで、django を 1.4.5 に、postgres を 9.2.3 に、psycopg2 を 2.4.6 に更新しました。私runserver
とすべてが問題ないように見えますが、セッション/ミドルウェア.py(36)localhost:8000
に悪名高い「現在のトランザクションが中止されました..」と表示されます。request.session.save()
を実行syncdb
しましmigrate
たが、エラーや変更はありません。'DATABASES' - 'OPTIONS': {'autocommit': True, } にも追加しましたが、それでも役に立ちません。そして、私もこれを試しました:
from django.db import connection
connection._rollback()
ジャンゴシェルで。
また、次の方法でpostgresを停止しようとしました:
pg_ctl -D /usr/local/var/postgres stop -s -m fast
そして私は得る:
pg_ctl: server does not shut down
実行pg -ef|grep postgres
すると、ハングしているクエリは表示されません。
このブロックを解決するにはどうすればよいですか? 何が原因であるかを見つける方法は?
回答: このエラーを解決するために私が行ったことの要約
SQLロギングを有効にしました:
DEBUG=True
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'django.utils.log.NullHandler',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
}
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'DEBUG',
},
}
}
これにより、実行されているすべてのSQLステートメントが表示されました。これには、内部DBエラーを引き起こしたものも含まれます。これは、私の場合はdjango-axesが原因でした(以前にバージョン1.2.9にアップグレードしました)。
django-axes では、特定のテーブルを作成する必要があります。syncdb を再実行しても問題は解決しませんでした。テーブルの 1 つに変更がありました (新しいフィールド - ユーザー名)。
python manage.py sqlclear axes
-削除するテーブルを示したので、psqlに行ってそれを行いました。その後、もう一度実行しpython manage.py syncdb
て更新されたテーブルを取得しました。
そして、__init__.py
軸モジュール内のバグを見つけましたget_version()
- 間違った文字列フォーマット。この混乱をすべて解決した修正:)
最後はハッピーエンド!