Como devo adicionar o caminho WSGIPython no servidor VirtualHost para Windows?

Nov 19 2020

Estou tentando adicionar WSGIPythonPath, VirtualHostmas estou gerando um erro:

Erro de sintaxe na linha 549 de /etc/httpd/conf/httpd.conf:

WSGIPythonPath não pode ocorrer dentro da seção

Tentei resolvê-lo da seguinte maneira: Onde deve WSGIPythonPath apontar em meu virtualenv?

Mas, ao pesquisar mais, descobri que WSGIDaemonProcesse WSGIProcessGroupnão são suportados no Windows de acordo com Por que WSGIDaemonProcess não está disponível no Windows? .

Então, como devo adicionar WSGIPythonPathe onde para que eu possa hospedar vários sites Django em meu servidor Apache24.

Qualquer ajuda seria benéfica.

Aqui está meu httpd.confarquivo:

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>

Respostas

1 Razenstein Nov 21 2020 at 23:21

Tive uma jornada difícil estabelecendo duas virtudes. hosts com Apache mod_wsgi no Windows. Portanto, a solução aqui é para Apache / mod_wsgi e Windows.

Em geral, acho muito difícil separar Apache / mod_wsgi para windows e unix, pois em muitos artigos os dois estão misturados ou não é mencionado claramente de qual deles está sendo falado.

  1. Aqui está a parte importante da definição do host virt em httpd-vhosts.conf porque no Apache / mod_wsgi para Windows você não tem WSGIDaemonProcess / WSGIProcessGroup disponível.
   <VirtualHost *:80>
            ServerName name1
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site1
            ......                                                                            
     </VirtualHost>
 
    <VirtualHost *:80>
            ServerName name2
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site2
            ......                                                                            
     </VirtualHost>

Se você não adicionar "application-group ...", apenas o host virtual que é chamado pela primeira vez após a reinicialização do Apache será inicializado com wsgi.py e settings.py e, posteriormente, obterá todas as solicitações para virt. hosts que possuem um WSGIScriptAlias ​​ou, em outras palavras, que são gerenciados por mod_wsgi !! No meu entendimento, este é um bug bastante sério porque um host virt deve sempre obter seu próprio "thread" como comportamento padrão do Apache / mod_wsgi. Btw Site1 e Site2 são apenas nomes que devem ser diferentes.

  1. O WSGIPythonPath não pode ser atribuído dentro do virt. Seção de hosts. Você precisa colocar a atribuição de caminho equivalente no arquivo wsgi.py de cada um dos seus aplicativos:
    sys.path.append('D:/........../xxxxx_project/xxxxx')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'xxxxx.settings'
    application = get_wsgi_application()