Почему WSGI python -path работает только в / var / www / и не работает в / home /? - PullRequest
0 голосов
/ 01 мая 2020

В настоящее время у меня есть Flask настройка веб-сайта, которая будет обслуживаться с использованием WSGI через apache2.

В настоящее время он работает с моим текущим файлом конфигурации apache2. Вот мой файл конфигурации:

<VirtualHost *:80>
        ServerName dmt.server.local
        ServerAdmin nh@server.com
        WSGIProcessGroup dmt
        WSGIDaemonProcess dmt python-path=/var/www/dmt/venv/lib/python3.6/site-packages
        # WSGIDaemonProcess dmt python-path=/home/nh/.pyenv/versions/dmt/lib/python3.6/site-packages
        WSGIScriptAlias / /var/www/dmt/dmt.wsgi
        <Directory /var/www/dmt/app/>
            Order allow,deny
            Allow from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Как видите, я использую python с виртуальной средой, которая хранится в папке моего приложения, в папке с именем venv. Я создал эту виртуальную среду, используя "python -m venv venv".

Однако вместо этого я хочу использовать Pyenv. Pyenv сохраняет файлы в /home/nh/.pyenv/

. Поэтому я меняю строку в конфигурации apache2, чтобы она теперь указывала на мою новую виртуальную среду Pyenv.

<VirtualHost *:80>
        ServerName dmt.server.local
        ServerAdmin nh@server.com
        WSGIProcessGroup dmt
        # WSGIDaemonProcess dmt python-path=/var/www/dmt/venv/lib/python3.6/site-packages
        WSGIDaemonProcess dmt python-path=/home/nh/.pyenv/versions/dmt/lib/python3.6/site-packages
        WSGIScriptAlias / /var/www/dmt/dmt.wsgi
        <Directory /var/www/dmt/app/>
            Order allow,deny
            Allow from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

После перезапуск сервера, теперь это больше не работает. Теперь я получаю ошибку сервера 500, и теперь в журналах я получаю исключение в журналах ошибок apache2, что модуль Flask не может быть найден:

[Fri May 01 11:27:47.417664 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] mod_wsgi (pid=36878): Failed to exec Python script file '/var/www/dmt/dmt.wsgi'.
[Fri May 01 11:27:47.418291 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] mod_wsgi (pid=36878): Exception occurred processing WSGI script '/var/www/dmt/dmt.wsgi'.
[Fri May 01 11:27:47.418315 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] Traceback (most recent call last):
[Fri May 01 11:27:47.418330 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766]   File "/var/www/dmt/dmt.wsgi", line 8, in <module>
[Fri May 01 11:27:47.418466 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766]     from app import app as application
[Fri May 01 11:27:47.418473 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766]   File "/var/www/dmt/app/__init__.py", line 1, in <module>
[Fri May 01 11:27:47.418517 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766]     from flask import Flask
[Fri May 01 11:27:47.418529 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] ImportError: No module named flask

Я убедился, что у меня установлен pip все те же модули в ОБА виртуальных средах. Я дважды проверил, что файлы для модулей существуют и одинаковы в обоих местах.

Если я перехожу в каталог /home/nh/.pyenv/versions/dmt/lib/python3.6 / site-packages Я вижу, что модуль Flask действительно установлен.

Я не могу понять, чем отличаются эти два местоположения.

Почему он работает, когда Python путь - / var / www/dnt/venv, но он не работает, когда он находится в /home/nh/.pyenv/versions/dmt, даже если файлы в обоих местах одинаковы.

Кто-нибудь знает что происходит?

...