Jak dodać ścieżkę WSGIPython na serwerze VirtualHost dla Windows?

Nov 19 2020

Próbuję dodać WSGIPythonPathw VirtualHostale 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 WSGIDaemonProcessi WSGIProcessGroupnie są obsługiwane w systemie Windows, zgodnie z Dlaczego WSGIDaemonProcess nie jest dostępny w systemie Windows? .

Jak więc mam dodać WSGIPythonPathi gdzie, aby móc hostować wiele witryn Django na moim serwerze Apache24.

Każda pomoc byłaby korzystna.

Oto mój httpd.confplik:

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

1 Razenstein Nov 21 2020 at 23:21

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.

  1. 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.

  1. 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()