
In meiner vorherigen Frage habe ich gefragt, wie man mod_wsgi dazu bringt, eine bestimmte Python-Version zu verwenden. Als Antwort auf diese Frage habe ich eine virtuelle Python 3.9-Umgebung erstellt und WSGI dazu gebracht, diese zu verwenden. Jetzt läuft meine Flask-App jedoch überhaupt nicht – ich bekomme nur die 404-Seite, die für den Rest meiner Site konfiguriert ist. Ich erhalte keine Fehler, wenn ich Apache2 neu starte, und das Apache-Fehlerprotokoll ist leer, wenn ich die Site besuche. Ich denke, der Fehler muss an meiner virtuellen Umgebung liegen, da ich zuvor bereits Test-Flask-Apps mit demselben Konfigurationsstil erstellt habe.
Meine virtuelle Umgebung befindet sich in path/to/my/app/venv/
.
path/to/my/app/runner.wsgi
:
import sys
# Make something appear in error log if the WSGI is run at all
raise ValueError()
PROJECT_DIR = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, PROJECT_DIR)
from my_app import app as application
Teil von /etc/apache2/sites-available/000-default-le-ssl.conf
:
WSGIDaemonProcess myapp user=www-data group=www-data threads=4 python-home=/path/to/my/app/venv/
WSGIScriptAlias /my-app/ path/to/my/app/runner.wsgi
/etc/apache2/mods-available/wsgi.load
LoadModule wsgi_module "/path/to/my/app/venv/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so"
WSGIPythonHome "path/to/my/app/venv"
Betriebssystem: Ubuntu 18.04.5 LTS
Antwort1
Ok, ich habe das Problem gefunden. Es war wirklich dumm. Im Grunde habe ich /var/www/my_app
statt /var/www/my-app
in geschrieben /etc/apache2/sites-available/000-default-le-ssl.conf
. Ich habe die Pfade repariert, die Site deaktiviert, die Site aktiviert, Apache neu geladen und jetzt funktioniert es. Mich würde interessieren, warum Apache nicht wenigstens eine Warnung ausgibt, wenn es nicht auf die WSGI-Datei zugreifen kann.
Antwort2
Welcher Benutzer führt Apache aus?
Kann dieser Benutzer tatsächlich auf Ihre WSGI-Anwendung zugreifen? Überprüfen Sie dies, indem Sie
ls -la
den Pfad und alle seine Komponenten ausführen oder indem Sienamei
(namei /path/....
) verwenden.Befindet sich SELinux im Durchsetzungsmodus? Wenn ja, überprüfen Sie die Prüfprotokolle.
audit2why
Dies kann hilfreich sein (möglicherweise müssen Sie einige Pakete installieren).