AWS Elastic Beanstalkで、「64ビットAmazon Linux 2017.09 v2.6.0を実行しているPython 3.6」プラットフォーム上で、mod_wsgi
設定に問題があるようです。/etc/httpd/conf.d/wsgi.conf
で確認できます。
WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
python-home=/opt/python/run/venv/ \
python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.6/site-packages:/opt/python/run/venv/lib/python3.6/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
ただし、これは/var/log/httpd/error_log
で取得されます。
[Mon Nov 20 19:54:44.565076 2017] [:error] [pid 32080] mod_wsgi (pid=32080): Call to 'site.addsitedir()' failed for '(null)', stopping.
[Mon Nov 20 19:54:44.565444 2017] [:error] [pid 32080] mod_wsgi (pid=32080): Call to 'site.addsitedir()' failed for '/opt/python/run/venv/lib64/python3.6/site-packages:/opt/python/run/venv/lib/python3.6/site-packages'.
サイトにアクセスしようとすると、次のエラーが発生します。
[Mon Nov 20 21:21:21.304605 2017] [:error] [pid 2886] [remote 71.236.217.102:39802] ModuleNotFoundError: No module named 'myappname'
WSGIDaemonProcess
ディレクティブを次のように変更すると(コロンで区切られたパスが削除されます):
WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
python-home=/opt/python/run/venv/ \
python-path=/opt/python/current/app user=wsgi group=wsgi \
home=/opt/python/current/app
その後、ModuleNotFoundError
を取得できなくなりました。
これは https://github.com/GrahamDumpleton/mod_wsgi/issues/92 で説明されているのと同じバグのようですが、mod_wsgi
4.4.15で修正されました。ただし、AMIはmod24_wsgi-python36.x86_64==3.5-1.24.amzn1
付きでプリインストールされています。
.ebextensionsスクリプトを使用してWSGIDaemonProces
sを修正しようとすると、ベイクインされたデプロイフックの1つによって修正されず、ベイクされたデフォルトがデフォルトで壊れているように見えます。どうすればこれを修正できますか?
今日同じ問題が発生しました(「64ビットAmazon Linux 2017.09 v2.6.0実行中Python 3.6」、mod_wsgiエラー)。
私には回避策がありますが、それが適切であるか、または最も直接的な解決策であるかはわかりません。
最新のmod_wsgi
をインストールします。
より長い説明...
最初に以下を手動で実行して動作を確認し、その後スクリプトを作成して、後でデプロイしても破棄されないようにしました。
mod_wsgi
のインストールにはapxs
が必要になるため、インスタンスに移動してパッケージを見つけます。
eb ssh
yum provides apxs
私の場合は3でした。最も古いものはsshコンソールで動作したため、.ebextensions/01_packages.config
に追加しました。
packages:
yum:
...
httpd24-devel-2.4.27-3.75.amzn1.x86_64: []
次に、sshでこのシーケンスに従って手動でビルドしたバージョンをテストしましたod mod_wsgi
(yum
パッケージを動作させることができませんでした-おそらく完了)。
Sudo -s # become root
cd /tmp
wget -q "https://github.com/GrahamDumpleton/mod_wsgi/archive/4.4.21.tar.gz"
tar -xzf '4.4.21.tar.gz'
cd ./mod_wsgi-4.4.21
./configure --with-python=/usr/bin/python3.6
make
make install
これまでのところすべてが良好であると想定して、Apacheを再起動します。
service httpd restart
次にvar/log/httpd/error_log
を確認すると、次のように表示されます。
... [pid 2088] AH00163: Apache/2.4.27 (Amazon) mod_wsgi/4.4.21 Python/3.6.2 configured -- resuming normal operations
Pythonアプリページをリロードし、それが機能しています(別のエラーが発生しましたが、mod_wsgi
は機能しています)。
ここで、デプロイメントのこの部分を作成します。
数回繰り返した後、.ebextensions/...
ファイルでこれを解決しました。
packages:
yum:
git: []
gcc-c++: []
httpd24-devel-2.4.27-3.75.amzn1.x86_64: []
files:
"/tmp/update-wsgi.sh" :
mode: "000755"
owner: root
group: root
content: |
# update mod_wsgi
cd /tmp
wget -q "https://github.com/GrahamDumpleton/mod_wsgi/archive/4.4.21.tar.gz" && \
tar -xzf '4.4.21.tar.gz' && \
cd ./mod_wsgi-4.4.21 && \
Sudo ./configure --with-python=/usr/bin/python3.6 && \
Sudo make && \
Sudo make install && \
Sudo service httpd restart
commands:
mod_wsgi_update:
command: /tmp/update-wsgi.sh
cwd: /tmp
いくつかのメモ:
mod_wsgi
をビルドするには、gcc
依存関係が必要ですhttpd24-devel
依存関係はapsx
ツール用です