mod_wsgi “Falha ao chamar 'site.addsitedir ()' na plataforma AWS Elastic Beanstalk Python 3.6

6

No AWS Elastic Beanstalk, na plataforma "64bit Amazon Linux 2017.09 v2.6.0 executando Python 3.6", parece haver um problema com a configuração mod_wsgi . Eu vejo isso em /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

No entanto, recebo isso em /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'.

Tentar acessar o site resulta nesse erro:

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

Se eu alterar a diretiva WSGIDaemonProcess para o seguinte (removendo assim os caminhos separados por dois pontos):

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

Então eu não consigo mais o ModuleNotFoundError .

Este parece ser o mesmo bug descrito no link que foi corrigido em mod_wsgi 4.4.15. No entanto, o AMI vem pré-instalado com mod24_wsgi-python36.x86_64==3.5-1.24.amzn1 .

Se eu tentar consertar o WSGIDaemonProces s usando um script .ebextensions, ele não será corrigido por um dos ganchos de implantação embutidos e, de qualquer forma, os padrões como prontos parecem estar quebrados por padrão. Como no mundo eu corrijo isso?

    
por David Eyk 21.11.2017 / 15:34

1 resposta

6

Eu encontrei o mesmo problema hoje ("64bit Amazon Linux 2017.09 v2.6.0 executando Python 3.6", erros mod_wsgi).

Eu tenho uma solução alternativa, embora não tenha certeza se é uma solução adequada ou mais direta.

Em suma

Instale o último mod_wsgi .

Explicação mais longa ...

Verifique se funciona manualmente

Primeiro, fiz o seguinte manualmente para verificar se funcionava e, em seguida, criei o script para que ele não fosse destruído em uma implantação posterior.

A instalação de mod_wsgi precisará de apxs , então acesse a instância e encontre os pacotes:

eb ssh
yum provides apxs

No meu caso, havia 3. O mais antigo funcionava no console do ssh, então adicionei a .ebextensions/01_packages.config :

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

Então, no ssh, eu segui essa sequência para testar a versão criada manualmente od mod_wsgi (não consegui fazer com que nenhum pacote yum funcionasse - embora provavelmente possa ser feito).

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

Assumindo que tudo está bem até agora, reinicie o Apache:

service httpd restart

Em seguida, procure em var/log/httpd/error_log e esperamos que você veja:

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

Eu recarreguei a página do aplicativo Python e ela está funcionando (bem, ela teve um erro diferente, mas mod_wsgi está funcionando).

Agora, para tornar essa parte da implantação.

Scripting

Após algumas iterações, resolvi isso no arquivo .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

Algumas notas:

  • a dependência gcc é necessária para que mod_wsgi crie
  • a httpd24-devel de dependência é para a ferramenta apsx
por 28.11.2017 / 06:00