Question mod_wsgi "L'appel à 'site.addsitedir ()' a échoué" sur la plate-forme AWS Elastic Beanstalk Python 3.6


Sur AWS Elastic Beanstalk, sur la plate-forme "Amazon Linux 2017.09 v2.6.0 exécutant Python 3.6", il semble y avoir un problème avec le mod_wsgi configuration. Je vois ça dans /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

Cependant, je reçois cela dans /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'.

Essayer d'accéder au site entraîne cette erreur:

[Mon Nov 20 21:21:21.304605 2017] [:error] [pid 2886] [remote 71.236.217.102:39802] ModuleNotFoundError: No module named 'myappname'

Si je change le WSGIDaemonProcess directive suivante (en supprimant ainsi les chemins séparés par deux points):

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

Alors je ne reçois plus le ModuleNotFoundError.

Cela semble être le même bogue décrit dans https://github.com/GrahamDumpleton/mod_wsgi/issues/92 qui a été fixé dans mod_wsgi 4.4.15. Cependant, l’AMI est préinstallé avec mod24_wsgi-python36.x86_64==3.5-1.24.amzn1.

Si j'essaie de réparer le WSGIDaemonProcess utilisant un script .ebextensions, il n’est pas corrigé par l’un des crochets de déploiement intégrés et, de toute façon, les valeurs par défaut cuites semblent rompues par défaut. Comment puis-je résoudre ce problème?


5
2017-11-21 14:34


origine




Réponses:


J'ai rencontré le même problème aujourd'hui ("64 bits Amazon Linux 2017.09 v2.6.0 sous Python 3.6", erreurs mod_wsgi).

J'ai une solution de contournement, bien que je ne sois pas sûr que ce soit une solution appropriée ou la plus directe.

En bref

Installez la dernière mod_wsgi.

Explication plus longue ...

Vérifiez que cela fonctionne manuellement

J'ai d'abord effectué les opérations suivantes manuellement pour vérifier que tout fonctionne, puis je les ai scriptées pour qu'elles ne soient pas détruites lors d'un déploiement ultérieur.

L'installation mod_wsgi aura besoin apxs, alors allez à l'instance et trouvez les paquets:

eb ssh
yum provides apxs

Dans mon cas, il y en avait 3. Le plus vieux travaillait sur la console ssh, alors j’ai ajouté à .ebextensions/01_packages.config:

packages:
  yum:
    ...
    httpd24-devel-2.4.27-3.75.amzn1.x86_64: []

Ensuite, en ssh, j'ai suivi cette séquence pour tester la version manuellement construite od mod_wsgi (Je ne pouvais pas en obtenir yum paquet au travail - bien que cela puisse probablement être fait).

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

En supposant que tout va bien jusqu'à présent, redémarrez Apache:

service httpd restart

Alors regarde dedans var/log/httpd/error_log et j'espère que vous verrez:

... [pid 2088] AH00163: Apache/2.4.27 (Amazon) mod_wsgi/4.4.21 Python/3.6.2 configured -- resuming normal operations

J'ai rechargé la page de l'application Python et ça marche (bien, il y avait une erreur différente mais mod_wsgi travaille).

Maintenant, faisons cette partie du déploiement.

Scripting

Après quelques itérations, je me suis installé dans le .ebextensions/... fichier:

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

Quelques notes:

  • la gcc la dépendance est nécessaire pour mod_wsgi construire
  • la httpd24-devel la dépendance est pour le apsx outil

6
2017-11-28 05:00