Ubuntu 14.04(Python 3.4)でApache2およびlibapache2-mod-wsgi-py3を使用したAssertionError


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

Ubuntu 14.04にはmod_wsgi 3.4が付属しています。https://code.djangoproject.com/ticket/22948#comment:2によると、Python 3.4にはmod_wsgiバージョン4.2以降を使用する必要があります。

mod_wsgiを最新バージョンにインストールする最良の方法は、pip(virtualenv内にある場合があります)を使用して取得し、そのモジュールをシステム全体のApacheにインストールすることです。私の場合、virtualenv setを使用してい/venv_pathます。

1)問題のあるパッケージを削除して依存関係をインストールする

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

2)pipを使用して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


1
virtualenvを作成するコマンドはvirtualenv -p python3.4 DIRECTORY、または3.4以降の場合は、次のようにすることをお勧めしますpyvenv-3.4 DIRECTORY
nyuszika7h 2015年

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ビットpython 3.4に基づいているようです。
Deleet、

このメソッドはpython-version-agnosticでありsudo /venv_path/bin/mod_wsgi-express install-module、ステップ3のpython3.6 で私のために機能し、wsgi_expressファイルに入れる必要があるパスを
出力

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.