web-dev-qa-db-ja.com

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

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: 

エラーなしで動作させるには?

10
samb

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システム全体にインストールすることです。私の場合、/venv_pathで設定されたvirtualenvを使用します。

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にエラーがないことを確認します

15
samb

Sambが提供する受け入れられた答えに何かを追加したかっただけです。

モジュール設定に追加する必要がある設定の実際の行は、mod_wsgi-express install-moduleコマンドによって出力されたものです(これは受け入れられた答えでは明示的ではありませんでした)。

また、私の場合(そして mod_wsgi pkg documentation -おそらく、受け入れられた答えが書かれたときはそうではなかった)、wsgi_express.*ファイルをmods-available、ただしwsgi.*のみ。実行してwsgi.loadファイルを新しい構成に置き換えるだけで十分でした。

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

もちろん、これはファイル全体を上書きするので、それ以上のディレクティブがある場合に注意してください。

0
praimmugen