Ich bin jedes Mal an derselben Stelle gestolpert, machen Sie sich also eine Notiz.
--Windows Server 2016 ist installiert.
Befolgen Sie Einbetten von mod_wsgi in Apache unter Python Windows.
Ich habe es hinzugefügt, weil es gemäß dem obigen Artikel nicht funktioniert hat.
Nach der Installation wird "mod_wsgi-express.exe" im Python Scripts-Verzeichnis erstellt ("C: \ Programme \ Python38 \ Scripts" in Ihrer Umgebung).
Die Einstellungen für Apache httpd.conf werden automatisch von mod_wsgi-express module-config
generiert. Kopieren Sie diese und fügen Sie sie in httpd.conf ein.
> mod_wsgi-express module-config
LoadFile "c:/program files/python38/python38.dll"
LoadModule wsgi_module "c:/program files/python38/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd"
WSGIPythonHome "c:/program files/python38"
↓
httpd.conf
…
LoadFile "c:/program files/python38/python38.dll"
LoadModule wsgi_module "c:/program files/python38/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd"
WSGIPythonHome "c:/program files/python38"
…
Referenz: Django 1.4-Dokumentation - Verwendung von Django in Apache- und mod_wsgi-Umgebungen
Das erste Argument in der Zeile> WSGIScriptAlias
ist der Speicherort, an dem Sie Ihre Anwendung veröffentlichen (/
steht für die Stamm-URL), und das zweite Argument ist der Speicherort der" WSGI-Datei (siehe unten) "auf Ihrem System. WSGI wird normalerweise in einem Projektpaket platziert (in diesem Beispiel mysite). Apache verarbeitet nun alle Anforderungen unter der Stamm-URL unter Verwendung der angegebenen WSGI-Datei.
Das heißt, die Anforderung, die nach dem ersten Argument kommt, wird von der durch das zweite Argument angegebenen WSGI-Datei verarbeitet. Geben Sie für das zweite Argument wsgi.py in der Django-Projekt-App an, zu der Sie eine Verbindung herstellen möchten.
httpd.conf
WSGIScriptAlias / d:/apps/appname/appname/wsgi.py
Referenz: mod_wsgi --WSGIScriptAlias
Referenz: Django 1.4-Dokumentation - Verwendung von Django in Apache- und mod_wsgi-Umgebungen
Die Zeile> WSGIPythonPath
stellt sicher, dass die Pakete Ihres Projekts für Importe in Python-Pfade verwendet werden können.
Dies bedeutet, dass ich Ihnen den Speicherort der im Projekt verwendeten Site-Pakete mitteilen werde. Wenn Sie die Python-Version ändern und mehr venv erstellen, müssen Sie auch diesen Pfad ändern (Zugehöriger Artikel: ValueError at set_wakeup_fd funktioniert nur in der Haupt-Thread-Problemumgehung / hiro-jp / items / 1a15ac51165f5af395f3)), aber normalerweise ist appname / venv / Lib / site-packages
in Ordnung.
httpd.conf
WSGIPythonPath d:/apps/appname/venv/Lib/site-packages
Der Teil> \
Im Folgenden bedeutet dies, den Zugriff auf "d: / apps / appname / appname" zuzulassen ("Alle erforderlich").
httpd.conf
<Directory d:/apps/appname/appname>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
** Achtung **: In Alte Materialien wie Django 1.4 Documentation Die Beschreibung lautet wie folgt, funktioniert jedoch nicht in Apache 2.4 oder höher (Referenz: Apache 2.4 hat die Beschreibungsmethode für Zugriffsbeschränkungen geändert / items / c8eb1fedef3c00c5fbac)).
httpd.conf
# Apache2.2 Vorherige Beschreibungsmethode
<Directory d:/apps/appname/appname>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>
Wenn ich versuche, eine Verbindung herzustellen, wird hier ein interner Serverfehler angezeigt. Es kann wie folgt gelöst werden.
wsgi.py
"""
WSGI config for appname project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/
"""
import os
import sys #← Hinzufügen
from django.core.wsgi import get_wsgi_application
sys.path.append('D:/apps/appname') #← Hinzufügen
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'appname.settings')
application = get_wsgi_application()
In Verbindung stehender Artikel: Umgang mit dem internen Serverfehler mod_wsgi 500
Referenz: Apache2 mod_wsgi, 500 Internal Server Error
Recommended Posts