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:
エラーなしで動作させるには?
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
にエラーがないことを確認します
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
もちろん、これはファイル全体を上書きするので、それ以上のディレクティブがある場合に注意してください。