fastCGI Problem

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Samstag 19. April 2008, 20:11

Guten Abend,

Ich wollte heute in die Webprogrammierung mit Python einsteigen. Dafür habe ich mich für einen Apache ( WAMP Apache 2.2.8 ) mit fastCGI entschieden. Ich habe die dll von fastcgi verwendet, diese in die Modulliste eingetragen. Um fastCGI ausführen zu können hab ich folgende .htaccess verwendet.

.htaccess :

Code: Alles auswählen

Options +ExecCGI
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatcher.fcgi/$1 [QSA,L]
Nun zum dispatcher.fcgi :

Code: Alles auswählen

#!C:\Python25\python.exe
# -*- coding: UTF-8 -*-

from mainapp import app
from fcgi import WSGIServer
WSGIServer(app).run()
Und noch die mainapp.py :

Code: Alles auswählen

#!C:\Python25\python.exe
# -*- coding: UTF-8 -*-

from cgi import escape
import sys, os

def app(environ, start_response):
 import cgi
 start_response('200 OK', [('Content-Type', 'text/html')])
 yield '<html><head><title>Hello World!</title></head>\n' \
       '<body>\n' \
       '<p>Hello World!</p>\n</body></html>\n' 
fcgi.py habe ich von hier runtergeladen.

Wenn ich nun den Ordner mit den 4 Dateien im Browser aufrufe, bekomme ich als Antwort: Internal Server Error 500

In den Logs sind folgende Einträge:

Code: Alles auswählen

[Sat Apr 19 20:45:50 2008] [notice] Apache/2.2.8 (Win32) PHP/5.2.5 mod_fastcgi/2.4.6 configured -- resuming normal operations
[Sat Apr 19 20:45:50 2008] [notice] Server built: Jan 18 2008 00:37:19
[Sat Apr 19 20:45:50 2008] [notice] Parent: Created child process 5060
[Sat Apr 19 20:45:50 2008] [notice] Child 5060: Child process is running
[Sat Apr 19 20:45:50 2008] [notice] Child 5060: Acquired the start mutex.
[Sat Apr 19 20:45:50 2008] [notice] Child 5060: Starting 64 worker threads.
[Sat Apr 19 20:45:50 2008] [notice] FastCGI: process manager initialized
[Sat Apr 19 20:45:50 2008] [notice] Child 5060: Starting thread to listen on port 80.
[Sat Apr 19 20:46:09 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" started (pid 3248)
[Sat Apr 19 20:46:09 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" (pid 3248) terminated with exit with status '1'
[Sat Apr 19 20:46:14 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" restarted (pid 2952)
[Sat Apr 19 20:46:14 2008] [error] [client 127.0.0.1] (OS 109)Die Pipe wurde beendet.  : FastCGI: comm with server "C:/wamp/www/gw3/dispatcher.fcgi" aborted: GetOverlappedResult() failed
[Sat Apr 19 20:46:14 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" (pid 2952) terminated with exit with status '1'
[Sat Apr 19 20:46:14 2008] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "C:/wamp/www/gw3/dispatcher.fcgi"
[Sat Apr 19 20:46:15 2008] [error] [client 127.0.0.1] File does not exist: C:/wamp/www/favicon.ico
[Sat Apr 19 20:46:17 2008] [error] [client 127.0.0.1] File does not exist: C:/wamp/www/favicon.ico
[Sat Apr 19 20:46:19 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" restarted (pid 5244)
[Sat Apr 19 20:46:19 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" (pid 5244) terminated with exit with status '1'
[Sat Apr 19 20:46:19 2008] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Sat Apr 19 20:46:19 2008] [notice] Child 5060: Exit event signaled. Child process is ending.
[Sat Apr 19 20:46:20 2008] [notice] Child 5060: Released the start mutex
[Sat Apr 19 20:46:24 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" restarted (pid 4596)
[Sat Apr 19 20:46:24 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" (pid 4596) terminated with exit with status '1'
[Sat Apr 19 20:46:24 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw3/dispatcher.fcgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 600 seconds
[Sat Apr 19 20:46:25 2008] [notice] Child 5060: All worker threads have exited.
[Sat Apr 19 20:46:26 2008] [notice] Child 5060: Child process is exiting
[Sat Apr 19 20:46:26 2008] [notice] Parent: Child process exited successfully.
Vielen Dank für eure Hilfe.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 19. April 2008, 22:19

Hmm. Hast du statt ``fcgi.py`` mal flup probiert? Ich nutze das seit jeher und es hat bei mir immer gut mit FastCGI funktioniert (allerdings unter Linux).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 19. April 2008, 23:15

N@sty hat geschrieben:Ich wollte heute in die Webprogrammierung mit Python einsteigen. Dafür habe ich mich für einen Apache ( WAMP Apache 2.2.8 ) mit fastCGI entschieden.
Die kombination ist aber nicht so gut... Also als Einstieg in WebApps sich fastCGI vor die Brust zu nehmen... Ist zum Spielen eh doof, weil es nicht automatisch reloaded... Das ganze macht also ehr Sinn, wenn eine WebApp fertig ist und sie auf ein Produktivsystem eingesetzt wird.

Ich würde erstmal mit CGI Anfangen, oder einen Python Developer Server nehmen, wie ihn django bietet. Dabei kann man an den Skripten direkt arbeiten und im Browser per reload die Änderungen direkt sehen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Sonntag 20. April 2008, 13:44

Habs mal mit flup versucht, genau das selbe Problem ausser das sogar meine python.exe jetzt noch einen Fehler meldet.

Kann es sein, dass die fcgi.py von flup fast die selbe ist wie die, die ich oben verwendet habe? kommen zumindest beide vom selben Entwickler.

dispatcher.fcgi :

Code: Alles auswählen

#!C:\Python25\python.exe
# -*- coding: UTF-8 -*-

from mainapp import app
from flup.server.fcgi import WSGIServer
WSGIServer(app).run()
mainapp.py :

Code: Alles auswählen

#!C:\Python25\python.exe
# -*- coding: UTF-8 -*-
	   
def app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!\n']
Logs:

Code: Alles auswählen

[Sun Apr 20 14:38:59 2008] [notice] Apache/2.2.8 (Win32) PHP/5.2.5 mod_fastcgi/2.4.6 configured -- resuming normal operations
[Sun Apr 20 14:38:59 2008] [notice] Server built: Jan 18 2008 00:37:19
[Sun Apr 20 14:38:59 2008] [notice] Parent: Created child process 2592
[Sun Apr 20 14:38:59 2008] [notice] Child 2592: Child process is running
[Sun Apr 20 14:38:59 2008] [notice] Child 2592: Acquired the start mutex.
[Sun Apr 20 14:38:59 2008] [notice] Child 2592: Starting 64 worker threads.
[Sun Apr 20 14:38:59 2008] [notice] FastCGI: process manager initialized
[Sun Apr 20 14:38:59 2008] [notice] Child 2592: Starting thread to listen on port 80.
[Sun Apr 20 14:39:05 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" started (pid 2096)
[Sun Apr 20 14:39:05 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" (pid 2096) terminated with exit with status '1'
[Sun Apr 20 14:39:10 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" restarted (pid 6116)
[Sun Apr 20 14:39:10 2008] [error] [client 127.0.0.1] (OS 109)Die Pipe wurde beendet.  : FastCGI: comm with server "C:/wamp/www/gw4/dispatcher.fcgi" aborted: GetOverlappedResult() failed, referer: http://localhost/
[Sun Apr 20 14:39:10 2008] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "C:/wamp/www/gw4/dispatcher.fcgi", referer: http://localhost/
[Sun Apr 20 14:39:10 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" (pid 6116) terminated with exit with status '1'
[Sun Apr 20 14:39:15 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" restarted (pid 4316)
[Sun Apr 20 14:39:15 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" (pid 4316) terminated with exit with status '1'
[Sun Apr 20 14:39:20 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" restarted (pid 1796)
[Sun Apr 20 14:39:21 2008] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Sun Apr 20 14:39:21 2008] [notice] Child 2592: Exit event signaled. Child process is ending.
[Sun Apr 20 14:39:22 2008] [notice] Child 2592: Released the start mutex
[Sun Apr 20 14:39:23 2008] [notice] Child 2592: All worker threads have exited.
[Sun Apr 20 14:39:24 2008] [notice] Child 2592: Child process is exiting
[Sun Apr 20 14:39:24 2008] [notice] Parent: Child process exited successfully.
@jens:
Von CGI halte ich überhaupt nichts deswegen kommt für mich auch kein Einstieg dadurch in Frage. Django verwendet soweit ich weiss auch flup. Ob sich dadurch das Problem beseitigen lässt ..... ausserdem wolte ich low level anfangen und nicht durch eine Art Framework.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 20. April 2008, 14:07

Eventuell mal mod_fcgid ausprobieren?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Sonntag 20. April 2008, 14:31

Immer noch das selbe Problem. Die Doku ist leider nicht sehr verständlich. Hab jetzt einfach die .so ins Modul Verzeichnis kopiert und einen Eintrag in der config vom Apache hinzugefügt. Muss ich fastCGI deaktivieren? Wenn ja, wie muss ich dann die .htaccess Datei ändern?

Habs jetzt einfach mal mit eingeschalteten fastCGI versucht.

Logs:

Code: Alles auswählen

[Sun Apr 20 15:27:13 2008] [notice] Apache/2.2.8 (Win32) PHP/5.2.5 mod_fastcgi/2.4.6 configured -- resuming normal operations
[Sun Apr 20 15:27:13 2008] [notice] Server built: Jan 18 2008 00:37:19
[Sun Apr 20 15:27:13 2008] [notice] Parent: Created child process 3852
[Sun Apr 20 15:27:13 2008] [notice] Child 3852: Child process is running
[Sun Apr 20 15:27:13 2008] [notice] Child 3852: Acquired the start mutex.
[Sun Apr 20 15:27:13 2008] [notice] Child 3852: Starting 64 worker threads.
[Sun Apr 20 15:27:13 2008] [notice] FastCGI: process manager initialized
[Sun Apr 20 15:27:13 2008] [notice] Child 3852: Starting thread to listen on port 80.
[Sun Apr 20 15:27:19 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" started (pid 4480)
[Sun Apr 20 15:27:19 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" (pid 4480) terminated with exit with status '1'
[Sun Apr 20 15:27:24 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" restarted (pid 4876)
[Sun Apr 20 15:27:24 2008] [error] [client 127.0.0.1] (OS 109)Die Pipe wurde beendet.  : FastCGI: comm with server "C:/wamp/www/gw4/dispatcher.fcgi" aborted: GetOverlappedResult() failed, referer: http://localhost/
[Sun Apr 20 15:27:24 2008] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "C:/wamp/www/gw4/dispatcher.fcgi", referer: http://localhost/
[Sun Apr 20 15:27:24 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" (pid 4876) terminated with exit with status '1'
[Sun Apr 20 15:27:28 2008] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Sun Apr 20 15:27:28 2008] [notice] Child 3852: Exit event signaled. Child process is ending.
[Sun Apr 20 15:27:29 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" restarted (pid 4292)
[Sun Apr 20 15:27:29 2008] [warn] FastCGI: (dynamic) server "C:/wamp/www/gw4/dispatcher.fcgi" (pid 4292) terminated with exit with status '1'
[Sun Apr 20 15:27:29 2008] [notice] Child 3852: Released the start mutex
[Sun Apr 20 15:27:30 2008] [notice] Child 3852: All worker threads have exited.
[Sun Apr 20 15:27:32 2008] [notice] Child 3852: Child process is exiting
[Sun Apr 20 15:27:32 2008] [notice] Parent: Child process exited successfully.
Error in my_thread_global_end(): 2 threads didn't exit
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 20. April 2008, 15:22

N@sty hat geschrieben:Immer noch das selbe Problem. Die Doku ist leider nicht sehr verständlich. Hab jetzt einfach die .so ins Modul Verzeichnis kopiert und einen Eintrag in der config vom Apache hinzugefügt. Muss ich fastCGI deaktivieren? Wenn ja, wie muss ich dann die .htaccess Datei ändern?
Ja natürlich. Die konfiguration sollte so aussehen. Wenn das tut, dann kannst du mal mit ScriptAlias das Zeug weiter anpassen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Sonntag 20. April 2008, 15:58

selbes Problem

.htaccess :

Code: Alles auswählen

Options +ExecCGI
AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatcher.fcgi/$1 [QSA,L]
Logs:

Code: Alles auswählen

[Sun Apr 20 16:54:13 2008] [notice] Apache/2.2.8 (Win32) PHP/5.2.5 mod_fastcgi/2.4.6 configured -- resuming normal operations
[Sun Apr 20 16:54:13 2008] [notice] Server built: Jan 18 2008 00:37:19
[Sun Apr 20 16:54:13 2008] [notice] Parent: Created child process 3384
[Sun Apr 20 16:54:13 2008] [notice] Child 3384: Child process is running
[Sun Apr 20 16:54:13 2008] [notice] Child 3384: Acquired the start mutex.
[Sun Apr 20 16:54:13 2008] [notice] Child 3384: Starting 64 worker threads.
[Sun Apr 20 16:54:13 2008] [notice] FastCGI: process manager initialized
[Sun Apr 20 16:54:13 2008] [notice] Child 3384: Starting thread to listen on port 80.
[Sun Apr 20 16:54:19 2008] [warn] (OS 109)Die Pipe wurde beendet.  : mod_fcgid: get overlap result error
[Sun Apr 20 16:54:19 2008] [error] [client 127.0.0.1] Premature end of script headers: dispatcher.fcgi, referer: http://localhost/
[Sun Apr 20 16:54:25 2008] [warn] (OS 109)Die Pipe wurde beendet.  : mod_fcgid: get overlap result error
[Sun Apr 20 16:54:25 2008] [error] [client 127.0.0.1] Premature end of script headers: dispatcher.fcgi, referer: http://localhost/
[Sun Apr 20 16:54:30 2008] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Sun Apr 20 16:54:30 2008] [notice] Child 3384: Exit event signaled. Child process is ending.
[Sun Apr 20 16:54:31 2008] [notice] Child 3384: Released the start mutex
[Sun Apr 20 16:54:32 2008] [notice] Child 3384: All worker threads have exited.
[Sun Apr 20 16:54:34 2008] [notice] Child 3384: Child process is exiting
[Sun Apr 20 16:54:34 2008] [notice] Parent: Child process exited successfully.
Error in my_thread_global_end(): 2 threads didn't exit
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 20. April 2008, 20:17

Da haben wir ja den Fehler:

Code: Alles auswählen

Premature end of script headers: dispatcher.fcgi
Du musst die Shebang in deinem Skript anpassen, der kann die scheinbar nicht richtig lesen. Welche Lineendings nutzt du denn in der Datei? Unix? Windows? Mac? Versuch es mit Unix und Windows, mit einem von beiden sollte es hinhauen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 21. April 2008, 09:46

Leonidas hat geschrieben:Da haben wir ja den Fehler:

Code: Alles auswählen

Premature end of script headers: dispatcher.fcgi
Naja, die Fehlermeldung ist total pauschal und kann viele Ursachen haben.
Auch wenn es nicht speziell für fastCGI ist, hilft vielleicht: [wiki]Web-Skripte zum Laufen bringen[/wiki]

Bei fastCGI hilft es außerdem ein logging einzuschalten.
N@sty hat geschrieben:Von CGI halte ich überhaupt nichts deswegen kommt für mich auch kein Einstieg dadurch in Frage. Django verwendet soweit ich weiss auch flup. Ob sich dadurch das Problem beseitigen lässt ..... ausserdem wolte ich low level anfangen und nicht durch eine Art Framework.
Ich hab dazu mal was im Wiki hinterlassen: [wiki]Python und die Webentwicklung#WieAnfangen[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Montag 21. April 2008, 20:46

Den Shebang hab ich nochmal gecheckt. Ich verwende Vista :oops:

Danke für eure Hilfe. Ich denke das Problem liegt irgendwo in Vista, weil ich hab überall die Beispiel Programme und Configs verwendet.

Ich werde mir jetzt mal dieses HowTo vornehmen. Mit Ubuntu wirds hoffentlich besser klappen.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 21. April 2008, 21:00

N@sty hat geschrieben:Den Shebang hab ich nochmal gecheckt. Ich verwende Vista :oops:
Kam bei allen Lineendings der gleiche Fehler?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Dienstag 22. April 2008, 21:10

Hab erst vor kurzem mit Python angefangen und wollte durch die Webprogrammierung einen Einstieg finden.
Bin deswegen jetzt bissel überfragt was mit Lineendings gemeint ist bzw. wo ich da einen Fehler sehen kann.
Ich verwende Notepad++ um die Python Scripte zu erstellen.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 22. April 2008, 21:38

Ja siehst, du, gut das ich anchgefragt habe. habe mir schon gedacht, dass du meinen Tipp ignoriert hast.

Lies das mal: Zeilenvorschub. Du hast vermutlich DOS-Lineendings, ``\r\n``, versuch es doch mal mit ``\n`` als Lineending (Unix). In Vim sieht man das mit ``:set ff``, setzen geht mittels ``:set ff=unix``.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Mittwoch 23. April 2008, 17:02

und wie kann ich das mittels Windows machen? [erledigt]
Hab in Notepad++ die Funktion gefunden. Muss jetzt leider los, werde ich am Freitag gleich mal testen.

Vielen Dank darauf wäre ich nie gekommen!!!
Zuletzt geändert von N@sty am Mittwoch 23. April 2008, 17:15, insgesamt 1-mal geändert.
Antworten