2009-11-03 31 views
5

Próbuję skonfigurować mini-framework CherryPy Python z FastCGI (faktycznie fcgid) na Apache. Jestem na współdzielonym hoście, więc nie mam dostępu do httpd.conf, tylko htaccess. Śledzę te tutoriale bezskutecznie:CherryPy (lub inna frameworka Pythona) z FastCGI na współdzielonym hoście

ciśgle 500 błędów w/Apache kłody mówiąc "Przedwczesny koniec nagłówkami skrypt". Próbowałem wszystkiego (uprawnienia/polecenia/pełne ścieżki/deamonized/not-daimonized). Wiem, że Apache poprawnie wykonuje moje .fcgi, ponieważ jestem w stanie drukować do dziennika błędów z Pythona, ale to wszystko. Czy ktoś tam wcześniej zainstalował CherryPy lub inny framework na współdzielonym hoście? Twoja pomoc byłaby bardzo ceniona. Dzięki.

Odpowiedz

1

Artykuł Bluehosta był najlepszym źródłem informacji, ale nie przeczytałem dokładnie części o otrzymaniu najnowszych poprawek (początek 3 kroku). W momencie artykułu, a nawet teraz z CherryPy w wersji 3.1.2, nie można wykonywać "trybu dynamicznego" fcgi (gdy apache spawns ten proces). więcej here. Tryb dynamiczny jest niezbędny, jeśli jesteś na współdzielonym hoście.

Sprawdziłem bagażnik (3.2.0rc1), a po przeskoczeniu przez jakieś obręcze, zacząłem działać. Wykonałem krok 5, metoda C w artykule bluehost. Tutaj było rzeczy w głównym mojego 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"]) 

Również w CherryPy/procesu/servers.py, musiałem zmienić następujący wiersz:

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

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

Tak, to jest możliwe, aby działało, ale wydaje się dość hackowate. Powinieneś poczekać na ostateczne wydanie wersji 3.2.0 lub zrobić to, co zrobiłem i sprawdzić Web.py. Udało mi się bardzo łatwo pracować z moim współdzielonym hostem (docs wyjaśnia dobrze fastcgi/htaccess).

1

Apache + Bluehost + fastcgi + cherrypy + wsgi to niestety wiele elementów. Chciałbym mieć rok, aby napisać dla ciebie ostateczny przewodnik, ale niestety. Możesz uzyskać pewien wgląd od rather long mailing list thread, który zaowocował opublikowanymi linkami.

+0

Najpierw debugowałem na własnej skrzynce linuxowej, aby jak najlepiej kontrolować sytuację. Dzięki za link. To dość długa rozmowa.Mam nadzieję, że mogą sprawić, że rzeczy będą bardziej płynne w następnej wersji – arshaw

1

Pomysł: upewnij się, że plik .fcgi ma odniesienie do odpowiedniego pliku wykonywalnego Pythona w początkowej linii:

#/usr/bin/python

musiałem dostać Django działający z fcgi na Bluehost i apache przy użyciu niewłaściwego środowiska python był moim problemem (pracował z powłoki, ale nie z web/apache).

Oprócz tego, jeśli możesz wydrukować na dzienniku błędów z kodu, czy możesz potwierdzić, że kod jest poprawnie wykonany, bez żadnych wyjątków, kiedy wchodzisz na tę stronę? (nie podczas uruchamiania z powłoki).

+0

, upewniłem się, że shebang był poprawny, a także uprawnienia. mój python był zdecydowanie uruchomiony, ale apache nie podpinał fastcgi do niego poprawnie. (zobacz moje rozwiązanie powyżej). dzięki – arshaw

0

W pliku dziennika serwera sieciowego powinien on rzeczywiście pokazywać, jakie dane wyjściowe go mylą. Czy na pewno szukasz w dzienniku błędów, a także dzienniku dostępu?

+0

normalnie po prostu zawiesił się (brak wyjścia). wtedy znalazłem, że potrzebowałem daemonize = False, a potem wszystko przestało się zawieszać. Ale wtedy próbował uruchomić proces fcgi na porcie 4000, o którym Apache nie wiedział, więc nie byłoby wyjścia. wygląda na to, że "tryb dynamiczny" rozwiązuje moje problemy (zobacz moje rozwiązanie). dzięki – arshaw