AssertionError ใช้ Apache2 และ libapache2-mod-wsgi-py3 บน Ubuntu 14.04 (Python 3.4)


10

บน Ubuntu 14.04 การใช้ Apache2 กับแพคเกจ libapache2-mod-wsgi-py3 ที่ติดตั้งจะให้ข้อผิดพลาดใน /var/log/apache2/error.log

วิธีการทำซ้ำเป็นเรื่องง่าย:

sudo apt-get install apache2
sudo service apache2 restart
# /var/log/apache2/error.log is "clean"
sudo apt-get install libapache2-mod-wsgi-py3
sudo service apache2 restart

/var/log/apache2/error.log ให้ข้อผิดพลาดต่อไปนี้:

[Mon Jan 05 16:51:53.641332 2015] [:error] [pid 3141:tid 140703516379008] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Mon Jan 05 16:51:53.643563 2015] [:error] [pid 3141:tid 140703516379008] Traceback (most recent call last):
[Mon Jan 05 16:51:53.643633 2015] [:error] [pid 3141:tid 140703516379008]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Mon Jan 05 16:51:53.644350 2015] [:error] [pid 3141:tid 140703516379008]     assert tlock is not None
[Mon Jan 05 16:51:53.643449 2015] [:error] [pid 3140:tid 140703516379008] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Mon Jan 05 16:51:53.644456 2015] [:error] [pid 3140:tid 140703516379008] Traceback (most recent call last):
[Mon Jan 05 16:51:53.644514 2015] [:error] [pid 3140:tid 140703516379008]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Mon Jan 05 16:51:53.645052 2015] [:error] [pid 3140:tid 140703516379008]     assert tlock is not None
[Mon Jan 05 16:51:53.645119 2015] [:error] [pid 3141:tid 140703516379008] AssertionError: 
[Mon Jan 05 16:51:53.647513 2015] [:error] [pid 3140:tid 140703516379008] AssertionError: 

จะทำให้ปราศจากข้อผิดพลาดได้อย่างไร?

คำตอบ:


15

Ubuntu 14.04 มาพร้อมกับ mod_wsgi 3.4 ตามhttps://code.djangoproject.com/ticket/22948#comment:2เราจำเป็นต้องใช้ mod_wsgi เวอร์ชั่น 4.2+ สำหรับ Python 3.4

วิธีที่ดีที่สุดในการติดตั้ง mod_wsgi เป็นเวอร์ชันล่าสุดคือการใช้ pip (อาจเป็น virtualenv) จากนั้นติดตั้งโมดูลเพื่อ apache ทั่วทั้งระบบ ในกรณีของฉันฉันจะใช้ชุด virtualenv /venv_pathใน

1) ลบแพ็คเกจที่มีปัญหาและติดตั้งการอ้างอิง

sudo apt-get remove libapache2-mod-wsgi-py3
sudo apt-get install apache2-dev

2) ติดตั้ง mod_wsgi ใน virtualenv ด้วย pip

. /venv_path/bin/activate
pip install mod_wsgi

3) ติดตั้งลงใน Apache (ทั้งระบบ)

sudo /venv_path/bin/mod_wsgi-express install-module
sudo vi /etc/apache2/mods-available/wsgi_express.load /etc/apache2/mods-available/wsgi_express.conf

เนื้อหาของ /etc/apache2/mods-available/wsgi_express.load

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so

เนื้อหาของ /etc/apache2/mods-available/wsgi_express.conf

WSGIPythonHome /venv_path

4) เปิดใช้งานโมดูลและรีสตาร์ท Apache

sudo a2enmod wsgi_express
sudo service apache2 restart

5) ตรวจสอบว่าไม่มีข้อผิดพลาด /var/log/apache2/error.log


1
คุณอาจต้องการที่จะพูดถึงว่าคำสั่งในการสร้าง virtualenv เป็นvirtualenv -p python3.4 DIRECTORYหรือ 3.4+ pyvenv-3.4 DIRECTORYดีกว่า:
nyuszika7h

1
ถูกต้อง ... แต่ฉันไม่ได้พูดถึงเพื่อให้ความสำคัญกับคำถาม mod_wsgi
samb

1
แต่เนื่องจากคุณใช้ virtualenv ในตัวอย่างของคุณแล้วทำไมยังไม่พูดถึงวิธีสร้างมันด้วยล่ะ
nyuszika7h

หากบุคคลอื่นได้รับข้อผิดพลาด ( cannot open shared object file: No such file or directory) เมื่อพยายามทำเช่นนี้อย่าลืมเปลี่ยนรุ่นในขั้นตอนที่ 3 ฉันใช้ Python 3.5, 64- บิต mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so. หากคุณไม่ทราบว่าคุณมีเวอร์ชันใดให้ไปที่โฟลเดอร์ ( /usr/lib/apache2/modules/) แล้วมองหา ดูเหมือนว่าคำตอบนี้จะใช้ไพ ธ อน 32- บิต 3.4
Deleet

วิธีนี้เป็น python-version-agnostic และใช้งานได้กับ python3.6 sudo /venv_path/bin/mod_wsgi-express install-moduleในขั้นตอนที่ 3 จะพิมพ์พา ธ ที่คุณต้องใส่ในwsgi_expressไฟล์
gevra

0

เพียงแค่ต้องการที่จะเพิ่มบางสิ่งในคำตอบที่ได้รับการยอมรับจาก samb

บรรทัดการกำหนดค่าที่แท้จริงที่คุณต้องการเพิ่มลงในโมดูลการกำหนดค่าคือmod_wsgi-express install-moduleบรรทัดที่แสดงผลโดยคำสั่ง (นี่ไม่ได้ชัดเจนในคำตอบที่ยอมรับ)

นอกจากนี้ในกรณีของฉัน (และเป็นไปตามเอกสาร mod_wsgi pkg - นี่อาจไม่ใช่กรณีที่เขียนคำตอบที่ยอมรับได้) ฉันไม่ได้รับwsgi_express.*ไฟล์ใด ๆmods-availableแต่เพียงอย่างเดียวwsgi.*และเพียงพอที่จะแทนที่wsgi.loadไฟล์ด้วย กำหนดค่าใหม่โดยการทำงาน

mod_wsgi-express install-module > /etc/apache2/mods-available/wsgi.load

แน่นอนว่ามันจะเขียนทับไฟล์ทั้งหมดดังนั้นโปรดระวังในกรณีที่คุณมีคำสั่งเพิ่มเติมอีก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.