2009-11-03 1 views
5

Ich versuche, das Python-Mini-Framework CherryPy mit FastCGI (eigentlich fcgid) auf Apache zu konfigurieren. Ich bin auf einem freigegebenen Host, also habe ich keinen Zugriff auf httpd.conf, nur htaccess. Ich habe diese Übungen ohne Erfolg gefolgt:CherryPy (oder ein anderes Python-Framework) mit FastCGI auf Shared Host

Ich erhalte 500 Fehler w/die Apache "Vorzeitiges Ende der Skript-Header" Protokolle zu sagen. Ich habe alles versucht (Berechtigungen/shebangs/vollständige Pfade/deamonized/nicht-Daimonized). Ich weiß, dass Apache meine .fcgi korrekt ausführt, weil ich von Python in das Fehlerprotokoll drucken kann, aber das war's. Hat schon jemand CherryPy oder ein anderes Framework auf einem freigegebenen Host installiert? Ihre Hilfe würde sehr geschätzt werden. Vielen Dank.

Antwort

1

Der Bluehost-Artikel war die beste Ressource, aber ich habe den Teil über das Erhalten der neuesten Patches (den Anfang von Schritt 3) nicht sorgfältig gelesen. Zur Zeit des Artikels und sogar jetzt mit CherryPy Version 3.1.2, können Sie nicht 'dynamischer Modus' fcgi tun (wenn Apache den Prozess hervorbringt). mehr here. Der dynamische Modus ist grundlegend wichtig, wenn Sie sich auf einem freigegebenen Host befinden.

Ich habe den Kofferraum (3.2.0rc1) ausgecheckt, und nachdem ich durch einige Reifen gesprungen bin, habe ich es zum Laufen gebracht. Ich folgte Schritt 5, Methode C im Artikel bluehost. Hier war der Stoff in der Haupt meiner cherryd.fcgi:

if __name__ == '__main__': 
    cherrypy.config.update({ 
     'server.socket_port': None, 
     'server.socket_host': None, 
     'server.socket_file': None 
    }) 
    start(daemonize=False, fastcgi=True, imports=["hello"]) 

Auch in cherrypy/Prozess/servers.py, ich die folgende Zeile zu ändern hatte:

# from this 
# if not hasattr(socket.socket, 'fromfd'): 

# to this 
if not hasattr(socket, 'fromfd'): 

So ist es möglich, um es zur Arbeit zu bringen, aber es fühlt sich irgendwie hacky. Sie sollten auf die endgültige Version von Version 3.2.0 warten oder tun, was ich getan habe und Web.py überprüfen. Ich konnte es sehr leicht mit meinem geteilten Host arbeiten lassen (docs erklären fastcgi/htaccess gut).

1

Apache + Bluehost + fastcgi + cherrypy + wsgi ist leider eine Menge Stücke. Ich wünschte, ich hätte ein Jahr Zeit, um den endgültigen Leitfaden für Sie zu schreiben, aber leider. Sie erhalten möglicherweise einen Einblick in die rather long mailing list thread, die zu den von Ihnen geposteten Links geführt hat.

+0

Ich habe zuerst auf meiner eigenen Linux-Box debuggen, um die Situation so viel wie möglich zu kontrollieren. Danke für den Link. Es ist eine ziemlich lange Unterhaltung.Hoffe, dass sie die Dinge in der nächsten Version – arshaw

1

Eine Idee: stellen Sie sicher, Ihre .fcgi Datei einen Verweis auf die richtige Python-Executable in der Anfangszeile hat:

#/usr/bin/python

musste ich bekommen Django lief mit fcgi auf Bluehost und Apache mit der falschen Python-Umgebung war mein Problem (funktionierte aus der Shell, aber nicht aus dem Web/Apache).

Wenn Sie aus Ihrem Code in das Fehlerprotokoll drucken können, können Sie außerdem bestätigen, dass der Code beim Zugriff auf die Webseite ohne Ausnahmen korrekt ausgeführt wird? (nicht wenn du von der Shell kommst).

+0

reibungsloser machen können. Ich habe dafür gesorgt, dass der Shebang korrekt war, genauso wie die Berechtigungen. mein Python lief definitiv, aber Apache hakte Fastcgi nicht richtig auf. (siehe meine Lösung oben). danke – arshaw

0

In der Protokolldatei Ihres Webservers sollte es eigentlich zeigen, was die Ausgabe war, die es verwechselte. Sind Sie sicher, dass Sie sowohl in das Fehlerprotokoll als auch in das Zugriffsprotokoll schauen?

+0

würde es normalerweise nur hängen (keine Ausgabe). Ich fand dann, dass ich daemonize = False brauchte, und dann hörten die Dinge auf zu hängen. Aber dann hat es versucht, den fcgi-Prozess auf Port 4000 zu starten, von dem Apache nichts wusste, also würde es keine Ausgabe geben. sieht so aus als ob der 'dynamische Modus' meine Probleme löst (siehe meine Lösung). Vielen Dank – arshaw

Verwandte Themen