Ubuntu 14.04'te Apache2 ve libapache2-mod-wsgi-py3 kullanan AssertionError (Python 3.4)


10

Ubuntu 14.04'te, yüklü libapache2-mod-wsgi-py3 paketiyle Apache2 kullanılması /var/log/apache2/error.log dosyasında hata veriyor

Üremenin yolu basittir:

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 aşağıdaki hatayı verir:

[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: 

Hatasız çalışması nasıl sağlanır?

Yanıtlar:


15

Ubuntu 14.04, mod_wsgi 3.4 ile birlikte gelir. Göre https://code.djangoproject.com/ticket/22948#comment:2 biz Python 3.4 4.2 ve üzeri mod_wsgi sürümünü kullanmak gerekir.

Mod_wsgi'yi en son sürüme kurmanın en iyi yolu, onu pip ile almak (virtualenv'de olabilir) ve daha sonra modülünü sistem çapında apache'ye kurmaktır. Benim durumumda sanalenv setini kullanıyorum /venv_path.

1) Sorunlu paketi kaldırın ve bağımlılığı yükleyin

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

2) pip ile virtualenv mod_wsgi yükleyin

. /venv_path/bin/activate
pip install mod_wsgi

3) Apache'ye yükleyin (sistem çapında)

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

İçeriği /etc/apache2/mods-available/wsgi_express.load

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

İçeriği /etc/apache2/mods-available/wsgi_express.conf

WSGIPythonHome /venv_path

4) Modülü etkinleştirin ve Apache'yi yeniden başlatın.

sudo a2enmod wsgi_express
sudo service apache2 restart

5) Hata olmadığını kontrol edin /var/log/apache2/error.log


1
Bir VIRTUALENV oluşturmak için komut olduğunu belirtmek isteyebilir virtualenv -p python3.4 DIRECTORYdaha iyi, ya da 3.4+ için: pyvenv-3.4 DIRECTORY.
nyuszika7h

1
Bu doğru ... ama mod_wsgi sorusuna odaklanmak için bahsetmedim.
samb

1
Ancak örneğinizde zaten virtualenv kullandığınız için, neden nasıl oluşturulacağından da bahsetmiyoruz?
nyuszika7h

Bunu cannot open shared object file: No such file or directoryyapmaya çalışırken başka biri hata ( ) alırsa , 3. adımdaki sürümü değiştirmeyi unutmayın. Python 3.5, 64-bit kullanıyordum. mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so. Hangi sürüme sahip olduğunuzu bilmiyorsanız, klasöre ( /usr/lib/apache2/modules/) gidin ve bakın. Bu yanıt 32 bit python 3.4'e dayanıyor gibi görünüyor.
Deleet

bu yöntem python-sürüm-agnostik ve sudo /venv_path/bin/mod_wsgi-express install-module3. adımda benim için python3.6 ile çalıştıwsgi_express
gevra

0

Sadece samb tarafından kabul edilen cevaba bir şeyler eklemek istedim.

Modül yapılandırmasına eklemeniz gereken gerçek yapılandırma satırları, mod_wsgi-express install-modulekomut tarafından verilen satırlardır (bu, kabul edilen cevapta açık değildir).

Ayrıca, benim durumumda (ve mod_wsgi pkg belgelerine göre - kabul edilen cevap yazıldığında muhtemelen bu değildi) Herhangi bir wsgi_express.*dosya alamadım mods-available, ama sadece wsgi.*ve wsgi.loaddosyayı değiştirmek için yeterliydi çalıştırarak yeni yapılandırma

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

Tabii ki, bu tüm dosyanın üzerine yazacaktır, bu yüzden içinde daha fazla direktif olması durumunda dikkat edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.