Ubuntu 14.04에서 Apache2 및 libapache2-mod-wsgi-py3 사용시 AssertionError (Python 3.4)


10

Ubuntu 14.04에서 libapache2-mod-wsgi-py3 패키지가 설치된 Apache2를 사용하면 /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

우분투 14.04는 mod_wsgi 3.4와 함께 제공됩니다. https://code.djangoproject.com/ticket/22948#comment:2 에 따르면 Python 3.4에는 mod_wsgi 버전 4.2 이상을 사용해야합니다.

mod_wsgi를 최신 버전으로 설치하는 가장 좋은 방법은 pip를 사용하여 (virtuenv에있을 수 있음) 모듈 전체를 아파치 전체에 설치하는 것입니다. 내 경우에는에서 설정 된 virtualenv를 사용 /venv_path합니다.

1) 문제가있는 패키지를 제거하고 의존성을 설치하십시오

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

2) pip로 virtualenv에 mod_wsgi를 설치하십시오.

. /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 DIRECTORY3.4 이상인 것이 좋습니다 pyvenv-3.4 DIRECTORY.
nyuszika7h

1
맞습니다 ...하지만 mod_wsgi 질문에 초점을 맞추기 위해 언급하지 않았습니다.
samb

1
그러나 예제에서 이미 virtualenv를 사용하고 있으므로 가상 가상 머신을 만드는 방법도 언급하지 않겠습니까?
nyuszika7h

cannot open shared object file: No such file or directory이 작업을 시도 할 때 다른 사람이 오류 ( )를 받으면 3 단계에서 버전을 전환해야합니다. 64 비트 Python 3.5를 사용하고있었습니다. mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so. 가지고있는 버전을 모르는 경우 폴더 ( /usr/lib/apache2/modules/) 로 이동하여 보십시오. 이 답변은 32 비트 파이썬 3.4를 기반으로하는 것 같습니다.
Deleet

이 방법은 python-version-agnostic이며 sudo /venv_path/bin/mod_wsgi-express install-module3 단계에서 python3.6 으로 작업했습니다 . 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.