Na Ubuntu 14.04 użycie Apache2 z zainstalowanym pakietem libapache2-mod-wsgi-py3 powoduje błędy w /var/log/apache2/error.log
Sposób reprodukcji jest prosty:
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 daje następujący błąd:
[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:
Jak to działa bezbłędnie?
virtualenv -p python3.4 DIRECTORY
albo za 3.4+, lepiej:pyvenv-3.4 DIRECTORY
.cannot open shared object file: No such file or directory
) podczas próby wykonania tej czynności, pamiętaj o zmianie wersji w kroku 3. Korzystałem z 64-bitowego języka Python 3.5.mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so
. Jeśli nie wiesz, którą wersję posiadasz, przejdź do folderu (/usr/lib/apache2/modules/
) i poszukaj. Ta odpowiedź wydaje się opierać na 32-bitowym pythonie 3.4.sudo /venv_path/bin/mod_wsgi-express install-module
w kroku 3 wydrukuje ścieżki, które musisz umieścić wwsgi_express
plikachChciałem tylko dodać coś do zaakceptowanej odpowiedzi dostarczonej przez samb.
Rzeczywiste wiersze config, które należy dodać do konfiguracji modułu, to wiersze wypisane przez
mod_wsgi-express install-module
polecenie (nie było to jednoznaczne w zaakceptowanej odpowiedzi).Również w moim przypadku (i zgodnie z dokumentacją mod_wsgi pkg - prawdopodobnie nie było tak, gdy została napisana zaakceptowana odpowiedź) nie dostałem żadnych
wsgi_express.*
plikówmods-available
, ale tylkowsgi.*
i wystarczyło zastąpićwsgi.load
plik nowa konfiguracja przez uruchomienieOczywiście zastąpiłoby to cały plik, więc uważaj na wypadek, gdybyś miał w nim więcej dyrektyw.
źródło