Развертывание приложения Flask с mod_wsgi не может загрузить его зависимости, есть ли ошибка в моей настройке?

Я пытаюсь развернуть фляжное приложение с Apache и mod_wsgi.

Я следовал инструкциям официальной документации flask.

Я установил Apache и mod_wsgi (я не совсем уверен, что он установлен для python 3.5, но я не могу найти способ проверить).

Я создал виртуальную среду для своего приложения myapp со всеми необходимыми установленными зависимостями (используя pip).

virtualenv -p python3 env

Я создал файл myapp.wsgi, как было предложено в предыдущей ссылке:

activate_this = '/var/www/myapp/env/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

from project import app as application

Я создал vhost для своего приложения

<VirtualHost *:80>

    ServerName myapp.com

    WSGIScriptAlias / /var/www/myapp/myapp.wsgi

    <Directory /var/www/myapp>
            Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Когда я пытаюсь получить доступ к моему приложению с помощью браузера, я получаю ошибку 500 и ошибку журнала

[...] from project import app as application
[...] ImportError: No module named project

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

Есть идеи исправить ситуацию?


person heapOverflow    schedule 04.01.2018    source источник
comment
какова структура вашего проекта?? пожалуйста, добавьте это к вашему вопросу   -  person Espoir Murhabazi    schedule 04.01.2018
comment
В документации четко указано, как проверить, какую версию Python использует mod_wsgi. См. modwsgi.readthedocs. .io/en/develop/user-guides/   -  person Graham Dumpleton    schedule 04.01.2018
comment
Ваша проблема похожа на то, что вы не сказали mod_wsgi, где находится код вашего проекта. Первый шаг заключается в том, что вы должны перейти на использование режима демона mod_wsgi. Затем используйте параметр python-path для WSGIDaemonProcess, чтобы сообщить mod_wsgi, где находится код вашего проекта.   -  person Graham Dumpleton    schedule 04.01.2018


Ответы (1)


Мне не хватало этих двух строк в моем файле конфигурации Apache:

WSGIPythonHome /var/www/myapp/env/bin/python3.5
WSGIPythonPath /var/www/myapp/env/lib/python3.5/site-packages

Они должны быть за пределами раздела VirtualHost.

https://stackoverflow.com/a/27451634/2254402

person heapOverflow    schedule 05.01.2018
comment
Строка WSGIPythonHome неверна. Предполагается, что он указывает на каталог, который является корнем виртуальной среды Python, если он используется, а не на исполняемый файл python. Так будет WSGIPythonHome /var/www/myapp/env. Затем вы также можете удалить WSGIPythonPath, который желательно не использовать для ссылки на каталог site-packages. Вам действительно следует переключиться в режим демона. Использование встроенного режима — плохая идея. Дополнительные сведения о настройке виртуальной среды см. на странице modwsgi.readthedocs.io/en. /разработка/руководства пользователя/ - person Graham Dumpleton; 06.01.2018