web-dev-qa-db-ja.com

AWS Elastic Beanstalkでmod_wsgi "Call to 'site.addsitedir()' failed" "Python 3.6プラットフォーム

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スクリプトを使用してWSGIDaemonProcessを修正しようとすると、ベイクインされたデプロイフックの1つによって修正されず、ベイクされたデフォルトがデフォルトで壊れているように見えます。どうすればこれを修正できますか?

6
David Eyk

今日同じ問題が発生しました(「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_wsgiyumパッケージを動作させることができませんでした-おそらく完了)。

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ツール用です
6
Andrew E