#python-3.x #apache #exception #mod-wsgi
Вопрос:
Я установил mod-wsgi из исходного кода, используя Python3 (Apache 2.4.46 на виртуальной машине Amazon Linux 2).
Каждый раз, когда я перезагружаю свой демон wsgi, в журнале ошибок Apache появляется следующая ошибка:
Exception ignored in: <generator object path at 0x7f128e93fdd0>
Traceback (most recent call last):
File "/usr/lib64/python3.7/importlib/resources.py", line 190, in path
NameError: name 'FileNotFoundError' is not defined
Я думаю, что это происходит, когда демон выходит из строя, так как я также вижу ошибку, когда отключаю Apache.
Я запускаю свой проект в виртуальной среде в python3. Это моя конфигурация Apache:
<VirtualHost *:443>
<Directory /var/www/html/project/>
Options ExecCGI FollowSymlinks -SymLinksIfOwnerMatch
Require all granted
</Directory>
ErrorLog /home/ec2-user/apache_project_errors.log
ServerName project.projtds.net
DocumentRoot /var/www/html/project/
WSGIDaemonProcess project threads=1 processes=2 python-home=/var/www/html/project/venv home=/var/www/html/project
WSGIScriptAlias / /var/www/html/project/project.wsgi process-group=project
WSGIScriptReloading On
</VirtualHost>
И мой .wsgi довольно прост:
from project import create_app
application = create_app()
Все это вызывает приложение flask (project.py):
from flask import Flask
def create_app():
app = Flask(__name__, instance_relative_config=False)
@app.route("/")
def home():
import sys
string = f"Python version {sys.version} Version info {sys.version_info}"
return string
return app
На данный момент я просто проверяю версию python, так как ошибка типична для интерпретатора python2, просматривающего код python3… Но sys.версия отображается как 3.7, и я могу запускать конкретные вызовы python3 в своем проекте.
Я проверил, как модуль wsgi загружается в Apache conf (/etc/httpd/conf.modules.d/wsgi.conf):
LoadModule wsgi_module modules/mod_wsgi.so
Я не вижу ошибки в других проектах, не связанных с wsgi, запущенных на том же сервере Apache. Я понятия не имею, как исправить ошибку. Это не мешает мне запускать свой проект, но я хотел бы точно знать, откуда взялась ошибка и почему.
Есть ли способ получить журналы отладки mod-wsgi? Это то, что мне нужно сделать в моем проекте? (колба, .wsgi и т. Д.)
Ответ №1:
Мне не хватало одного параметра:
<Directory /var/www/html/project/>
Options ExecCGI FollowSymlinks -SymLinksIfOwnerMatch
Require all granted
</Directory>
должно было быть:
<Directory /var/www/html/jiraiop/>
Options ExecCGI FollowSymlinks -SymLinksIfOwnerMatch
Require all granted
WSGIApplicationGroup %{GLOBAL}
</Directory>
https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIApplicationGroup.html
Любые приложения WSGI в глобальной группе приложений всегда будут выполняться в контексте первого интерпретатора, созданного Python при его инициализации, процесса, обрабатывающего запрос.
Я так понимаю, это необходимо для того, чтобы убедиться, что интерпретатором является python3. Не знаю, почему у него как-то возникли трудности без этого, но… Это все исправляет.