Jak dodać ścieżkę WSGIPython na serwerze VirtualHost dla Windows?
Próbuję dodać WSGIPythonPath
w VirtualHost
ale rzuca mi błąd:
Błąd składniowy w linii 549 pliku /etc/httpd/conf/httpd.conf:
WSGIPythonPath nie może wystąpić w sekcji
Próbowałem rozwiązać ten problem w następujący sposób: Gdzie powinien wskazywać WSGIPythonPath w moim virtualenv?
Ale po dalszych badaniach stwierdziłem, że WSGIDaemonProcess
i WSGIProcessGroup
nie są obsługiwane w systemie Windows, zgodnie z Dlaczego WSGIDaemonProcess nie jest dostępny w systemie Windows? .
Jak więc mam dodać WSGIPythonPath
i gdzie, aby móc hostować wiele witryn Django na moim serwerze Apache24.
Każda pomoc byłaby korzystna.
Oto mój httpd.conf
plik:
LoadFile "c:/python37/python37.dll"
LoadModule wsgi_module "c:/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/python37"
WSGIPythonPath "E:/edukon/"
Listen 7020
<VirtualHost *:7020>
ServerName 000.000.000.000
# Django Project
WSGIScriptAlias / "E:/edukon/edukon/wsgi.py"
<Directory "E:/edukon/edukon">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static "E:/edukon/static/"
<Directory "E:/edukon/static/">
Require all granted
</Directory>
Alias /media "E:/edukon/media/"
<Directory "E:/edukon/media/">
Require all granted
</Directory>
</VirtualHost>
Odpowiedzi
Miałem trudną podróż, przygotowując dwa virt. hosty z Apache mod_wsgi pod Windows. Więc rozwiązanie jest tutaj dla Apache / mod_wsgi i Windows.
Ogólnie wydaje mi się, że oddzielenie Apache / mod_wsgi dla systemu Windows i unix jest dość trudne, ponieważ w wielu artykułach oba te elementy są mieszane lub w ogóle nie jest jasno wymienione, o którym mowa.
- Oto ważna część definicji hosta virt w httpd-vhosts.conf, ponieważ w Apache / mod_wsgi dla Windows nie masz dostępnego WSGIDaemonProcess / WSGIProcessGroup.
<VirtualHost *:80>
ServerName name1
WSGIScriptAlias / "D:/....../wsgi.py" application-group=site1
......
</VirtualHost>
<VirtualHost *:80>
ServerName name2
WSGIScriptAlias / "D:/....../wsgi.py" application-group=site2
......
</VirtualHost>
Jeśli nie dodasz "grupy-aplikacji ...", tylko host wirtualny, który jest pierwszy wywoływany po restarcie Apache, zainicjuje się z wsgi.py i settings.py, a następnie otrzyma wszystkie żądania do virt. hosty, które mają WSGIScriptAlias lub innymi słowy, które są obsługiwane przez mod_wsgi !! W moim rozumieniu jest to raczej poważny błąd, ponieważ host virt powinien zawsze mieć swój własny „wątek” jako standardowe zachowanie Apache / mod_wsgi. Btw Site1 i Site2 to tylko nazwy, które muszą być różne.
- Nie można przypisać WSGIPythonPath wewnątrz virt. Sekcja gospodarzy. Musisz umieścić równoważne przypisanie ścieżki w pliku wsgi.py każdej z twoich aplikacji:
sys.path.append('D:/........../xxxxx_project/xxxxx')
os.environ['DJANGO_SETTINGS_MODULE'] = 'xxxxx.settings'
application = get_wsgi_application()