Tôi đang phát triển một ứng dụng web Django được triển khai trên máy chủ Apache với WSGI và mọi thứ diễn ra suôn sẻ. Hôm nay, tôi đã thực hiện một số thay đổi nhỏ đối với ứng dụng của mình admin.py
trong nỗ lực tùy chỉnh giao diện Quản trị viên Django cài sẵn và ban đầu đã mắc lỗi cú pháp (dấu ngoặc đơn không được đóng). Điều này có nghĩa là khi tôi chạm wsgi.py
và tải mã (tôi có WSGI đang chạy ở chế độ daemon trên máy chủ ảo của mình), trang web của tôi đã bị thay thế bằng Lỗi máy chủ nội bộ do WSGI dừng khi gặp lỗi cú pháp.
Vì vậy, tôi đã sửa lỗi cú pháp, kiểm tra xem tôi không còn lỗi nào nữa manage.py check
và chạm vào wsgi.py
để triển khai lại. Nhưng trang web của tôi vẫn hiển thị Lỗi máy chủ nội bộ! Kiểm tra nhật ký Apache, đây là những gì tôi thấy:
[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
Loạt lỗi đầu tiên cho thấy WSGI không thành công do lỗi cú pháp trong của tôi admin.py
. Tuy nhiên, loạt lỗi thứ hai dường như cho thấy một lỗi bên trong Django:
RuntimeError: populate() isn't reentrant
ném từ populate
phương pháp của registry.py
.
Googling thông báo lỗi này trả về ít thông tin đáng ngạc nhiên, không có thông tin nào từ tài liệu Django. Rõ ràng, đôi khi nó có thể xảy ra nếu bạn đặt tên một ứng dụng hai lần trong của bạn settings.py
, nhưng tôi không làm vậy. Quan trọng hơn, tôi đã không thay đổi settings.py
kể từ thời điểm trang web hoạt động tốt - điều duy nhất tôi thay đổi là admin.py
.
Tôi đã thử hoàn nguyên tất cả các thay đổi mà tôi đã thực hiện, vì vậy tất cả mã Python của tôi trở lại trạng thái như khi trang web đang hoạt động - và tôi vẫn gặp populate() isn't reentrant
lỗi khi cố gắng thực hiện WSGI tải lại mã!
Tôi cũng đã thử nhận xét các ứng dụng khác nhau trong phần INSTALLED_APPS của settings.py
và ngay cả khi chỉ bật 'django.contrib.staticfiles', lỗi vẫn xảy ra. Thật kỳ lạ, tôi vẫn gặp lỗi ngay cả khi tôi nhận xét tất cả các ứng dụng - Django xử lý lỗi ngay cả khi nó không tải bất kỳ ứng dụng nào!
Có ai biết chuyện gì đang xảy ra ở đây không? Hoặc bất kỳ cách nào tốt hơn để tôi gỡ lỗi này, vì quá trình truy xuất trong nhật ký Apache khá vô ích?
Lưu ý: Tôi đang sử dụng Django 1.7, Apache 2.2 và Python 2.7.
wsgi.py
dẫn đến cùng một lỗi Apache và các tệp .pyc không được tạo lại.