[解決済み] Django は RuntimeError で動作を停止します: populate() は reentrant ではありません。
質問
私は、WSGIでApacheサーバにデプロイされたDjangoのWebアプリケーションを開発しており、すべてが順調に進んでいます。今日、私は自分のアプリケーションの
admin.py
をカスタマイズしようとしたところ、最初に構文エラー (閉じない括弧) が発生しました。これは、私が
wsgi.py
を読み込むと、WSGIが構文エラーに当たったときに停止したため、私のウェブサイトはInternal Server Errorに置き換えられてしまいました(私はバーチャルホスト上でデーモンモードでWSGIを実行しています)。
そこで、構文エラーを修正し、これ以上
manage.py check
をタッチし
wsgi.py
を使用して再デプロイします。しかし、私のウェブサイトはまだInternal Server Errorを表示しています。Apacheのログを確認すると、このような状態になっています。
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Create interpreter 'quotes.cs.cornell.edu|'.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/extra/www/html/quotes/quotes_django' to path.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/' to path.
[Sun Nov 23 13:52:46 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/extra/www/html/quotes/quotes_django/
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] application = get_wsgi_application()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] django.setup()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 115, in populate
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] app_config.ready()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/apps.py", line 22, in ready
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] self.module.autodiscover()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/__init__.py", line 23, in autodiscover
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] autodiscover_modules('admin', register_to=site)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/utils/module_loading.py", line 74, in autodiscover_modules
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] import_module('%s.%s' % (app_config.name,
module_to_search))
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/usr/lib64/python2.7/importlib/__init__.py", line
37, in import_module
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] __import__(name)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/extra/www/html/quotes/quotes_django/quotespage/
admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] approve_quotes.short_description = "Approve selected
quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax
[Sun Nov 23 13:53:36 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/extra/www/html/quotes/quotes_django/
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] application = get_wsgi_application()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] django.setup()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 78, in populate
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] raise RuntimeError("populate() isn't reentrant")
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] RuntimeError: populate() isn't reentrant
最初の一連のエラーは、WSGI が私の
admin.py
. しかし、2つ目の一連のエラーは、Django の内部でのエラーを示しているようです。
RuntimeError: populate() isn't reentrant
から投げられた
populate
メソッドに
registry.py
.
このエラーメッセージをググっても、驚くほど少ない情報しか出てきませんし、Django のドキュメントからも何も出てきません。どうやら、このエラーメッセージは、アプリの名前を
settings.py
しかし、私はそんなことはしていない。もっと重要なのは、私は
settings.py
ウェブサイトが正常に動作していた時点から -- 私が変更した唯一のものは
admin.py
.
行った変更をすべて元に戻して、Pythonのコードをウェブサイトが動作していたときの状態に戻してみましたが、まだ
populate() isn't reentrant
WSGIにコードを再読み込みさせようとすると、エラーが発生します。
のINSTALLED_APPSセクションで、異なるアプリをコメントアウトすることも試してみました。
settings.py
そして、'django.contrib.staticfiles' だけを有効にしても、エラーはまだ起こっています。奇妙なことに、以下のようにコメントアウトしてもエラーが発生します。
すべて
Django はアプリをロードしていないときでもエラーを投げます!
どなたか、何が起こっているのかご存じですか?あるいは、Apacheのログのトレースバックがかなり役に立たないので、このエラーをデバッグするための良い方法があれば教えてください。
注意事項 Django 1.7、Apache 2.2、そして Python 2.7 を使っています。
どのように解決するのですか?
これは、Djangoの設定のどこかにあるバグが原因です。残念ながら、Django はそのバグをこの一般的で役に立たないエラーメッセージの背後に 隠しています。
本当の問題を明らかにするために
django/apps/registry.py
と80行目あたりで、置き換えてください。
raise RuntimeError("populate() isn't reentrant")
を使っています。
self.app_configs = {}
これにより、Django はロードを継続し、実際のエラーを明らかにすることができます。
私はこのエラーにいくつかの異なる原因で遭遇したことがあります。一度は、私のアプリのadmin.pyに間違ったインポートがあったためでした。
関連
-
[解決済み] CSRFに失敗しました。CSRFトークンがないか不正確です
-
[解決済み] django 上書きフォームクリーンメソッド
-
django no such table: django_session エラー解決。
-
django_filters のインポートがうまくいかない、 'django_filter' という名前のモジュールがない
-
Django REST Framework の post_create を使用する際のエラー django.db.utils.IntegrityError.Django.db.utils.IntegrityError.Django.db.utils.IntegrityError: UNIQUE 制約に失敗しました。
-
[解決済み] http://127.0.0.1:8000/ には接続できるのに、http://192.168.1.6/ には接続できないのはなぜですか?
-
[解決済み] Facebookログインとメール認証
-
[解決済み】テンプレートコード内で変数に値を設定するには?
-
[解決済み] djangoのテンプレートで文字列を連結する方法は?
-
[解決済み】Django Southでの後方移行について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コマンド 'git' が見つからない - windows
-
[解決済み] ImportError: 'django.utils' から名前 'six' をインポートできません。
-
[解決済み] 例外です。リクエストのデータストリームから読み込んだ後、ボディにアクセスすることはできません。
-
[解決済み] ImportError: rest_framework_jwt.viewsという名前のモジュールがありません。
-
Django: OperationalError そのようなテーブルがない
-
django のデータモデルで on_delete を使用する
-
[解決済み] Facebookログインとメール認証
-
[解決済み】Djangoで一対多の関係を表現する方法は?
-
[解決済み] djangoのテンプレートで文字列を連結する方法は?
-
[解決済み】Django TemplateDoesNotExist?