Portál AbcLinuxu, 2. června 2024 14:24


Dotaz: Django, apache, mod_wsgi

xxxxxx avatar 20.8.2015 23:00 xxxxxx | skóre: 23
Django, apache, mod_wsgi
Přečteno: 278×
Odpovědět | Admin
Zdravím,

rád bych napsal webovou aplikaci s Django frameworkem, nicméně jsme narazil na problém při nasazení s apachem. Bohužel, podle standardních how-to se mi to nedaří spustit. Django server (python3 manage.py runserver) funguje v pořádku.


V /var/log/httpd/error_log je při každém načtení webu:

End of script output before headers: wsgi.py

Struktura aplikace je vygenerovaná z: python3-django-admin startproject abc, takže:

/
  abc/
    manage.py
    abc/
      __init__.py
      wsgi.py
      settings.py
      urls.py
    test/
       __init__.py
       models.py
       views.py
       ...


Do wsgi.py jsem akorát přidal na první řádek shebang + chmod +x wsgi.py, jinak dostávám

Exec format error: exec of '/home/michal/www/abc/abc/wsgi.py' failed
A ještě jsem přidal
sys.path.append('/home/michal/www/abc')
sys.path.append('/home/michal/www')
čímž jsem se zbavil ImportError-u.


/etc/httpd/conf/httpd.conf vypadá takto:

<VirtualHost *:80>
    ServerName abc.localhost
    DocumentRoot /home/michal/www/abc
    
    WSGIScriptAlias / /home/michal/www/abc/abc/wsgi.py
    
    <Directory /home/michal/www/abc>
        Require all granted
        Options Indexes FollowSymLinks
    </Directory>

    <Directory /home/michal/www/abc/abc>
        Require all granted
        Options Indexes FollowSymLinks ExecCGI
        
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    
    LogLevel info
</VirtualHost>
A samotný wsgi.py vypadá takto:
#!/usr/bin/python3

import os
import sys

sys.path.append('/home/michal/www/abc')
sys.path.append('/home/michal/www')

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "abc.settings")

application = get_wsgi_application()


Možná je hloupost volba ExecCGI, když to má být WSGI (moc tomu pořád nerozumím), pak se zobrazí testovací stránka, že httpd funguje, a v logu je:

Options ExecCGI is off in this directory: /home/michal/www/abc/abc/wsgi.py

mod_wsgi jsem instaloval jako: dnf install python3-mod_wsgi

$ httpd -M | grep wsgi
 wsgi_module (shared)

Nevíte, co by mohlo být špatně? Případně, kde ještě hledat závady?


Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (xxxxxx (tazatel))
xxxxxx avatar 22.8.2015 17:38 xxxxxx | skóre: 23
Rozbalit Rozbalit vše Re: Django, apache, mod_wsgi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Už jsem to vyřešil. Přikládám řešení, kdyby měl někdo podobný problém:

wsgi.py nepotřebuje žádné úpravy, kromě přidání cest k aplikaci.

Žádné ExecCGI v httpd.conf nemá být.

V httpd.conf mi chybělo:
<IfModule mime_module>
    ...

    AddHandler wsgi-script .py

    ...
</IfModule>

...
WSGISocketPrefix run/wsgi
A ještě /run/httpd musí mít nastavenou skupinu, pod kterou běží httpd, tedy:
drwx--x--- 3 root <skupina> 120 Aug 22 15:23 /run/httpd
kde skupina bude nejčastěji www-data nebo apache

Poté lze postupovat podle django dokumentace.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.