So richten Sie Mod_WSGI für Python unter Ubuntu ein

25

Ich versuche, MOD_WSGI auf meiner Ubuntu-Box einzurichten. Ich habe Schritte gefunden, die besagten, dass ich die folgenden Schritte ausführen muss, die ich unter http://ubuntuforums.org/showthread.php?t=833766 gefunden habe

  1. sudo apt-get installiere libapache2-mod-wsgi
  2. sudo a2enmod mod-wsgi
  3. sudo /etc/init.d/apache2 neu starten
  4. sudo gedit / etc / apache2 / sites-available / default und aktualisiere das Verzeichnis
<Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews ExecCGI

  AddHandler cgi-script .cgi
  AddHandler wsgi-script .wsgi

  AllowOverride None
  Order allow,deny
  allow from all
</Directory>
  1. sudo /etc/init.d/apache2 neu starten
  2. Erstellt test.wsgi mit

    def application(environ, start_response):
        status = '200 OK' 
        output = 'Hello World!'    
        response_headers = [('Content-type', 'text/plain'),
                            ('Content-Length', str(len(output)))]
        start_response(status, response_headers)
    
        return [output]
    

Schritt 2 schlägt fehl, weil er angibt, dass er mod-wsgi nicht finden kann, obwohl das apt-get es gefunden hat. Wenn ich mit den Schritten weitermache, wird die Python-App nur als einfacher Text in einem Browser angezeigt.

Irgendwelche Ideen was ich falsch gemacht habe?


BEARBEITEN: Ergebnisse für gestellte Fragen

automatedtester@ubuntu:~$ dpkg -l libapache2-mod-wsgi
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                   Version                                Description
+++-======================================-======================================-============================================================================================
ii  libapache2-mod-wsgi                    2.5-1                                  Python WSGI adapter module for Apache
automatedtester@ubuntu:~$ dpkg -s libapache2-mod-wsgi
Package: libapache2-mod-wsgi
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 376
Maintainer: Ubuntu MOTU Developers <[email protected]>
Architecture: i386
Source: mod-wsgi
Version: 2.5-1
Depends: apache2, apache2.2-common, libc6 (>= 2.4), libpython2.6 (>= 2.6), python (>= 2.5), python (<< 2.7)
Suggests: apache2-mpm-worker | apache2-mpm-event
Conffiles:
 /etc/apache2/mods-available/wsgi.load 06d2b4d2c95b28720f324bd650b7cbd6
 /etc/apache2/mods-available/wsgi.conf 408487581dfe024e8475d2fbf993a15c
Description: Python WSGI adapter module for Apache
 The mod_wsgi adapter is an Apache module that provides a WSGI (Web Server
 Gateway Interface, a standard interface between web server software and
 web applications written in Python) compliant interface for hosting Python
 based web applications within Apache. The adapter provides significantly
 better performance than using existing WSGI adapters for mod_python or CGI.
Original-Maintainer: Debian Python Modules Team <[email protected]>
Homepage: http://www.modwsgi.org/
automatedtester@ubuntu:~$ sudo a2enmod libapache2-mod-wsgi
ERROR: Module libapache2-mod-wsgi does not exist!
automatedtester@ubuntu:~$ sudo a2enmod mod-wsgi
ERROR: Module mod-wsgi does not exist!

WEITERE BEARBEITUNG FÜR RMYates

automatedtester@ubuntu:~$ apache2ctl -t -D DUMP_MODULES
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_worker_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgid_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 python_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK
automatedtester@ubuntu:~$ 
AutomatedTester
quelle
Was kann mod_wsgi, Apache oder Python nicht finden?
Dana the Sane
1
Der Befehl "a2enmod" konnte "mod_wsgi
AutomatedTester

Antworten:

6

Ich habe festgestellt, dass dies ein bekannter Fehler mit dem Paket mod_wsgi apt-get ist, der über ein Jahr alt ist! Details unter http://www.mail-archive.com/[email protected]/msg1147225.html . Das Paket apt-get verfügte nicht über die Datei wsgi.load, sodass es mithilfe der Schritte im obigen Link erstellt werden musste.

Vielen Dank an alle, die geholfen haben!

AutomatedTester
quelle
5

Überprüfen Sie, ob das Modul tatsächlich ordnungsgemäß geladen ist mit:

apache2ctl -t -D DUMP_MODULES
rmyates
quelle
es sieht nicht so aus, als ob es richtig geladen wurde
AutomatedTester
4

Soweit ich sehen kann, haben Sie das Modul mod_wsgi nicht in Ihr Modul geladen httpd.conf.

Ich würde zuerst versuchen, die wsgi-Dateien in das mods-enabledVerzeichnis von Apache aufzunehmen.

sudo ln -s /etc/apache2/mods-available/wsgi.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-enabled

Starten Sie dann Apache neu und es sollte funktionieren.

Dan Loewenherz
quelle
2

Stellen Sie zunächst sicher, dass das WSGI-Modul tatsächlich installiert ist:

dpkg -l libapache2-mod-wsgi

Dies sollte Ihnen eine Ausgabe mit Namen, Version usw. liefern. Suchen Sie nach den Buchstaben links neben dem Namen. Dies zeigt den aktuellen Status des Pakets an. Um manuell zu prüfen, schauen Sie in / etc / apache2 / mods-available / nach und Sie sollten sowohl wsgi.conf als auch wsgi.load sehen . Wenn diese existieren, sollten sie entsprechende Symlinks in / etc / apache2 / mods-enabled / haben .

Sollte eine der beiden Einstellungen nicht existieren, beheben Sie diese zuerst. Sie können Python-Code nicht über Apache interpretieren, wenn Apache den Interpreter nicht finden kann. Außerdem funktioniert Ihr test.py- Skript aufgrund der von Ihnen konfigurierten AddHandler- Direktiven nicht. Diese Direktive weist Apache an, Dateien einer bestimmten Erweiterung an den entsprechenden Handler zu übergeben. Machen Sie Ihr Skript test.wsgi oder ändern Sie die AddHandler- Direktive.

Zayne S. Halsall
quelle
Die test.py war ein Tippfehler in der Frage. Ich wollte test.wsgi setzen.
AutomatedTester
Gut, aber haben Sie gemäß den obigen Anweisungen bestätigt, dass das Modul installiert und korrekt verbunden ist?
Zayne S Halsall
Ich habe die Informationen, nach denen Sie gefragt haben, in die Frage eingefügt.
AutomatedTester
Nicht alle Informationen - bitte überprüfen Sie manuell, ob die Dateien wsgi.conf und wsgi.load in / etc / apache2 / mods-available / wie gewünscht symbolisch mit / etc / apache2 / mods-enabled verknüpft sind . Eine einfache lange Auflistung des Verzeichnisses sollte ausreichen (dh ls -alh / etc / apache2 / mods-enabled / ).
Zayne S Halsall
1

Haben Sie die LoadModule-Zeile hinzugefügt, damit mod_wsgi tatsächlich geladen wird? Was ist die eigentliche Fehlermeldung und woher kommt sie? Sehen:

http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide

für Anweisungen auf niedriger Ebene. Da Sie Binärpakete verwenden, können Sie die Kompilierung überspringen, müssen aber dennoch veranlassen, dass mod_wsgi geladen wird. Wo und wie Sie dies tun können, wird zu einem gewissen Grad von Ihrer Linux-Distribution bestimmt. Basierend auf diesem Leitfaden soll Folgendes gelaufen sein:

sudo a2enmod mod-wsgi
sudo /etc/init.d/apache2 restart

Hast du das tatsächlich gemacht?


BEARBEITEN

Wenn Sie Ihre Frage noch einmal lesen, ist dies offensichtlich. Sie sagten, dass Dateien mit der Erweiterung .wsgi von mod_wsgi behandelt werden, aber dann haben Sie der Datei die Erweiterung .py gegeben. Verwenden Sie stattdessen .wsgi.

Graham Dumpleton
quelle
Die test.py war ein Tippfehler in der Frage. Ich wollte test.wsgi setzen. Ich habe den a2enmod ausgeführt, aber es wurde angegeben, dass er mod_wsgi nicht finden konnte, wie ich am Ende meiner Frage
AutomatedTester
1

Sie können sich zuerst die Syntax Ihres Pythons ansehen. Prüfen Sie, ob Sie nach der Funktionsdefinition wirklich 4 Leerzeichen haben. Überprüfen Sie die Python-Datei, indem Sie sie zuerst über das Terminal ausführen

$ python /var/www/py/wsgi_handler.wsgi

Wenn dann keine Fehler auftreten, führen Sie sie über den Webbrowser aus.

http: // localhost / wsgi /

Übrigens, Sie haben anscheinend etwas für Ihre Apache-Konfigurations- / VirtualHost-Datei verpasst. Fügen Sie dies in die Tags ein

WSGIScriptAlias /wsgi /var/www/py/wsgi_handler.py

apt hat übrigens keine probleme bei der installation des wsgi moduls. Ich habe es gerade getestet und erfolgreich ein Python-Skript in meinem Webbrowser ausgeführt.

YeahBoi
quelle
0

Nicht sicher, ob dies relevant ist, aber nach dem Ausführen:

apt-get install libapache2-mod-wsgi

... die folgenden Dateien existierten nicht :

/etc/apache2/mods-available/wsgi.conf
/etc/apache2/mods-available/wsgi.load

Die Neuinstallation schien die fehlenden Dateien nicht zu ersetzen. Seltsam! Allerdings purgeschien der Trick zu tun:

apt-get install libapache2-mod-wsgi
apt-get purge libapache2-mod-wsgi
apt-get install libapache2-mod-wsgi

# ls /etc/apache2/mods-available/ | grep wsgi
wsgi.conf
wsgi.load
Nick Bolton
quelle