AssertionError с помощью Apache2 и libapache2-mod-wsgi-py3 на Ubuntu 14.04 (Python 3.4)

На 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: 

Как получить его безошибочная работа?

10
задан 6 January 2015 в 07:11

2 ответа

Ubuntu 14.04 идет с mod_wsgi 3.4. Согласно https://code.djangoproject.com/ticket/22948#comment:2 мы должны использовать mod_wsgi версию 4.2 + для Python 3.4.

Лучший способ установить mod_wsgi на последней версии состоит в том, чтобы добраться, это с зернышком (может быть в virtualenv), и затем установите его модуль на апаче в масштабе всей системы. В моем случае я использую virtualenv, начинаются /venv_path.

1) Удалите проблематичный пакет и установите зависимость

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

2) Установите mod_wsgi в virtualenv с зернышком

. /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

15
ответ дан 23 November 2019 в 04:27

Просто требуемый для добавления чего-то к принятому ответу, предоставленному 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

Конечно, это перезаписало бы целый файл, поэтому предостереглось бы в случае, если у Вас, оказывается, больше есть директивы в нем.

0
ответ дан 23 November 2019 в 04:27

Другие вопросы по тегам:

Похожие вопросы: