Ich habe versucht, Django für die Zusammenarbeit mit Apache und mod_wsgi zu installieren, erhalte jedoch diese Fehlermeldung:
ImportError: No module named Django.core.handlers.wsgi,
Ich habe gelesen, dass es Benutzerfehler sein kann ...
Auf der Konsole (ssh) mit root-Zugriff habe ich keine Probleme beim Zugriff auf Django.core.handlers.wsgi, aber wenn Apache den Zugriff auf sie verlangt, kann dies nicht
Mein Django.wsgi:
import os
import sys
sys.path.append('my/rep/parents/of/my/project')
sys.path.append('/usr/lib/python2.4/site-packages/Django')
os.environ['Django_SETTINGS_MODULE'] = 'montest.settings'
os.environ['PYTHON_Egg_CACHE'] = '/tmp'
import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()
Meine vhost.conf:
Alias /media/ my/rep/parents/of/my/projet/montest/media/
<Directory my/rep/parents/of/my/projet/montest/media>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias /montest my/rep/parents/of/my/projet/Django.wsgi
<Directory my/rep/parents/of/my/projet>
Order deny,allow
Allow from all
</Directory>
BEARBEITEN:
Ok mein Ergebnis für Ldd mod_wsgi.so
linux-gate.so.1 => (0x0013c000)
libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000)
libdl.so.2 => /lib/libdl.so.2 (0x0023b000)
libutil.so.1 => /lib/libutil.so.1 (0x00420000)
libm.so.6 => /lib/libm.so.6 (0x00110000)
libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000)
Also entscheide ich mich, meine mod_wsgi-Installation mit test.wsgi zu testen
test.wsgi
def application(environ, start_response):
status = '200 OK'
output = 'Hello world, I am a wsgi app!'
response_headers = [('Content-Type', 'text/plain'), ('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
meine vhost.conf:
WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/Django/httpdocs/test.wsgi
<Directory /var/www/vhosts/mydomain.fr/subdomains/Django/httpdocs>
Order allow,deny
Allow from all
Options +ExecCGI
</Directory>
Es funktioniert jetzt ... als nächstes werde ich meine Django.wsgi-Konfig ausprobieren
Ich habe das Problem gelöst, indem ich den Ort von Site-Paketen hinzugefügt habe, in dem ich das Django-Unterverzeichnis (/Library/python/2.7/site-packages) in WSGIDaemonProcess aufbewahrt habe:
WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%{GROUP}
python-path=/Library/python/2.7/site-packages
Wenn Sie den eingebetteten Servermodus verwenden, verwenden Sie httpd.conf
:
WSGIPythonPath /Library/python/2.7/site-packages
Warum versuchen Sie überhaupt, das Verzeichnis site-packages in sys.path hinzuzufügen? Wenn Ihr mod_wsgi gegen Python 2.4 kompiliert wurde, sollte es bereits im Verzeichnis site-packages suchen. Klingt, als wäre Ihr mod_wsgi nicht einmal mit Python 2.4 kompiliert.
Lauf:
ldd mod_wsgi.so
gegen Ihre installierte Datei mod_wsgi.so, um herauszufinden, für welche Python-Version es kompiliert wird, und das Ergebnis zu veröffentlichen.
Ich hatte dieses Problem bereits, und der Apache/mod_wsgi-Prozess hatte keine Berechtigung zum Lesen der Module. Sie können Ihr Site-Packages/Django-Verzeichnis weltlesbar machen oder andere geeignete Benutzer-/Gruppenberechtigungen hinzufügen.
Falsch:
WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7
Recht:
WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7
Ich verbrachte viel zu viel Zeit damit, herauszufinden, warum meine Virtualenv Django nicht richtig lädt.
Ich habe dieses Problem gelöst, indem ich das übergeordnete Verzeichnis, das meine Django-Installation enthält, zu sys.path in wsgi.py hinzugefügt hat. Hier sind meine Einstellungen, FWIW:
/home/banjer/myproject/wsgi.py :
import os, sys
sys.path.append('/home/banjer/Django')
sys.path.append('/home/banjer') # this line solved it
sys.executable = '/usr/local/python-2.7.2/bin/python'
os.environ['Django_SETTINGS_MODULE'] = 'myproject.settings'
import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()
Überprüfen Sie die Dateiberechtigungen für das Site-Paket. Keine der oben genannten Lösungen funktionierte für mich, bis ich die Dateiberechtigungen korrigiert habe. Dies ist der Inhalt der Datei "ssl_error_log":
mod_wsgi (pid=986, process='OSQA', application='xxxxxx.yyy.com|/forum'): Loading WSGI script '/data/http/osqa/osqa.wsgi'.
mod_wsgi (pid=986): Target WSGI script '/data/http/osqa/osqa.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=986): Exception occurred processing WSGI script '/data/http/osqa/osqa.wsgi'. Traceback (most recent call last): File "/data/http/osqa/osqa.wsgi", line 14, in <module>
import Django.core.handlers.wsgi ImportError: No module named Django.core.handlers.wsgi
Aber ich habe es auf meinem Server gelöst. Wenn Sie dies über die Befehlszeile tun können, ist diese Lösung für Sie:
python
>>> import Django.core.handlers.wsgi
>>>
Was funktioniert hat ist, dass ich chmod go + rx site-packages libpython * (Dies könnte übertrieben sein, aber es hat bei mir funktioniert.)
Ich laufe als httpd als Apache.user und Python als root. Ich konnte die Pakete gut sehen, aber meine Berechtigungen waren nicht richtig eingerichtet (von jedem gelesen), und deshalb konnte httpd die Pakete nicht lesen.
Ich weiß, dass dies eine etwas alte Frage ist, aber ich dachte, ich würde für zukünftige SO - Benutzer zocken, die diese Frage finden könnten:
Ihr mod_wsgi ist mit python2.6 verbunden, aber Sie verwenden Python 2.4, um Django gemäß Ihrer Konfiguration auszuführen.
Ich gehe davon aus, dass/usr/bin/python auf etwas anderes als 2.6 zeigt, wofür mod_wsgi kompiliert wird. Es könnte auch daran liegen, dass Sie Django gegen 2.4 laufen lassen. Ich habe die gleiche Fehlermeldung erhalten, als ich mod_wsgi geladen hatte, das mit Python2.6 verknüpft war, als Django Python2.7 verwendete. Mit der Version von mod_wsgi habe ich installiert - es wurde mit Unterstützung für beide python2. [6-7] geliefert. Ich musste also nur den Symlink in/usr/lib/Apache2/modules/für mod_wsgi.so -> mod_wsgi entfernen .so-2.6 und ändern Sie es in mod_wsgi.so -> mod_wsgi.so-2.7.
Leicht genug.
Hallo!
Wenn Sie Deb-Distributive von Linux (Debian, Ubuntu usw.) verwenden, bearbeiten Sie die Datei
/etc/Apache2/modules/wsgi.load
Diese Datei enthielt den Pfad zur Korrektur der Wsgi-Bibliothek (für aktive Version des Python-Interpreters). Wenn Sie Python2.6 verwenden, ändern Sie die Zeichenfolge
LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi.so-2.7
zu
LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi.so-2.6
Sie können auch den Softlink zum mod_wsgi-Modul ändern:
cd /usr/lib/Apache2/modules
ln -s mod_wsgi.so-2.6 mod_wsgi.so
Vergessen Sie nicht, den Link zur Datei in zu ändern /etc/Apache2/modules/wsgi.load und starten Sie den Apache-Server neu
service Apache2 restart
P.S. Entschuldigung für mein schlechtes Englisch
Es wäre eine bessere Idee, wenn Sie Django aus Ihrer alten Python-Bibliothek entfernen.
[[email protected]]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/Django
..und installieren Sie es im Ordner 'site-packages' des aktuellen Pythons neu,
[[email protected] Django-1.4.1]# /usr/local/bin/python2.6 setup.py install
Das habe ich gemacht und ich bekomme diesen Fehler nicht mehr!
Diese Zeile ist sicherlich falsch:
sys.path.append('/usr/lib/python2.4/site-packages/Django')
Installieren Sie Django mit/für die Version von Python, für die mod_wsgi erstellt wurde.