ฉันได้พัฒนาเว็บแอปพลิเคชัน Django ที่ติดตั้งบนเซิร์ฟเวอร์ Apache ด้วย WSGI และทุกอย่างเป็นไปอย่างราบรื่น วันนี้ฉันได้ทำการเปลี่ยนแปลงเล็กน้อยในแอปของฉันเพื่อadmin.py
พยายามปรับแต่งอินเทอร์เฟซผู้ดูแลระบบ Django ในตัวและในตอนแรกเกิดข้อผิดพลาดทางไวยากรณ์ (วงเล็บที่ไม่ปิด) นั่นหมายความว่าเมื่อฉันแตะwsgi.py
และโหลดโค้ด (ฉันมี WSGI ที่ทำงานในโหมด daemon บนโฮสต์เสมือนของฉัน) เว็บไซต์ของฉันถูกแทนที่ด้วย 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
ไฟล์. อย่างไรก็ตามข้อผิดพลาดชุดที่สองดูเหมือนว่าจะแสดงข้อผิดพลาดภายใน Django:
RuntimeError: populate() isn't reentrant
โยนจากpopulate
วิธีการของregistry.py
.
Googling ข้อความแสดงข้อผิดพลาดนี้ส่งคืนข้อมูลเพียงเล็กน้อยอย่างน่าประหลาดใจโดยไม่มีเลยจากเอกสารของ 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
wsgi.py
ผลลัพธ์จะเกิดข้อผิดพลาด Apache เดียวกันและไฟล์. pyc จะไม่ถูกสร้างขึ้นใหม่