2010-11-23 8 views
4

Ich versuche, etwas trivial Django auf meinem Dreamhost-Konto laufen zu lassen. Ich habe meine Hausaufgaben gemacht, bevor ich mich für Dreamhost entschieden habe, aber ich habe erst vor kurzem beschlossen, Django auszuprobieren.Django auf Dreamhost mit Passenger: keine Antwort auf Browser, kein Fehler

Wie auch immer, ich habe eine triviale App, die ich unter something.mydomain.com ausführen möchte. Passagier ist aktiviert.

Wenn ich eine statische Seite besuche, lädt es sich gut aus ~/something.mydomain.com/public /. Wenn ich eine andere Seite besuche (z. B. something.mydomain.com/admin), sollte die URL von meiner Django-App gehandhabt werden.

Hier bleibe ich stecken; Die Seite lädt nicht und es wird kein Fehler ausgegeben. Es hält versucht, für immer zu laden (noch kein Timeout). Ich weiß nicht viel über die Protokolle; Ich habe selbst nichts gefunden.

Meine Vermutung ist die passagier_wsgi.py in ~/something.mydomain.com/ist fehlerhaft. Ich habe verschiedene Versionen ausprobiert.

Dieser Passagier gibt den ... einfrieren? wie oben beschrieben

import sys, os, django 
sys.path.append("/home/me/something.mydomain.com/") 
os.environ['DJANGO_SETTINGS_MODULE'] = 'something.settings' 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

Dieser Passagier glücklich "Hallo, Welt!" s me

import sys, os, django 
sys.path.append("/home/me/something.mydomain.com/") 
os.environ['DJANGO_SETTINGS_MODULE'] = 'something.settings' 
def application(environ, start_response): 
    write = start_response('200 OK', [('Content-type', 'text/plain')]) 
    return ["Hello, world!"] 

So bin ich geneigt, etwas über WSGIHandler() zu glauben, nicht richtig untergebracht.

Ich habe versucht, dies in einer Python-Shell:

>>> import django 

und es gab keine Fehler.

Was nun?

Antwort

1

Ich habe es aufgegeben, Django bei Dreamhost zu verwenden, da ihr Server jeden wsgi-Prozess zeitgesteuert erzwingt. Danach muss eine neue Anfrage eine neue Instanz starten, was in meinem Fall dazu führte, dass Anfragen manchmal 10-15s dauern. Es war mehr als genug Zeit für die meisten Leute, um davon auszugehen, dass die Seite ausgefallen war.

Dies ist möglicherweise nicht Ihr besonderes Problem, aber ich erwarte, dass Sie nicht glücklich sein werden, auch wenn Sie tun erhalten Sie Ihre Website arbeiten.

+0

Persönlich bin ich mit WebFaction und habe sie toll gefunden, auch mit Django. Wenn Sie nach einem anderen Host suchen, der gut mit Django und WSGI funktioniert, ist WebFaction eins. –

+1

Also ich versammle mich, aber ich habe für Dreamhost bezahlt. – Joel

0

Ich stimme mit Ben und Chris darin überein, dass DH shared env definitiv nicht für größere Projekte geeignet ist. Afaik, jedoch basiert die Zeitüberschreitung auf der letzten Last. Wenn du also einen stetigen Stream hast, sollte deine App - theoretisch - gut laufen. :)

Wie auch immer, ich benutze DH's geteilter Passagier für Proof of Concept viel, und es gibt gute Dienste, zu einem sehr guten Preis.

Über Ihr Problem - Passenger macht einen guten Job beim Erfassen und Analysieren von Rails-Fehlern, aber die experimentelle WSGI-Implementierung, die Sie für Django verwenden, stirbt, wenn eine Ausnahme ausgelöst wird. Eine Problemumgehung besteht darin, eine Middleware auszuführen, die den Fehler abfängt und gut an Passenger weitergibt.

lesen, um weitere Informationen und ein Beispiel: http://wiki.dreamhost.com/Passenger_WSGI#500_Errors_with_Passenger_WSGI_Workaround

+0

Danke für weitere Erläuterungen. Ich gebe der Middleware einen Versuch und melde mich zurück. Ich überlege ernsthaft, auf eine Linode umzusteigen, aber ich würde trotzdem gerne arbeiten. – Joel

0

hatte ich eine Reihe von Problemen, die ähnlich wie diese auf DH ursprünglich. Am Ende habe ich mein eigenes Python erstellt, um es anstelle ihres zu verwenden, und hatte seitdem keine Probleme mehr.

-Setup einiger Wege:

echo 'PATH="$HOME/bin:$PATH"' >> ~/.bash_profile 
echo 'LD_LIBRARY_PATH=$HOME/lib/' >> ~/.bash_profile 
source ~/.bash_profile 

Python installieren:

wget http://python.org/ftp/python/2.7/Python-2.7.tgz 
tar -xzvf Python-2.7.tgz 
rm Python-2.7.tgz 
cd Python-2.7 
./configure --prefix=${HOME} 
make 
make install 
cd .. 
rm -rf Python-2.7 

und Ihren WSGI Handler anzupassen:

import sys, os 
INTERP = "/home/example_user/bin/python" 
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv) 
sys.path.append("/home/example_user/example.com") 
os.environ["DJANGO_SETTINGS_MODULE"] = "example_project.settings" 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 
1

konnte ich einen guten Debug-Setup für WSGI erhalten App mit Werkzeug Modul. Ich denke, das kann auch mit Django integriert werden.

Zuerst nehme ich an, dass Sie Ihre Python virtualenv in Ihrem Home-Verzeichnis unter ~/env eingerichtet und aktiv ist.

Zweitens, installieren Sie die werkzeug-debugger-appengine Funktionen, um die werkzeug debugger zu patchen.

cd ~ 
mkdir src 
cd src 
git clone https://github.com/nshah/werkzeug-debugger-appengine.git 
cd werkzeug-debugger-appengine 
python setup.py install 

Der letzte Schritt ist Ihre passenger_wsgi.py Datei einrichten:

import sys, os 

DEBUG = True 
ROOT = os.path.dirname(os.path.abspath(__file__)) 
INTERP = '/home/HOMEDIR/env/bin/python' 

sys.path.insert(1,ROOT)  # for when your app is in your web dir 
if sys.executable != INTERP: 
    os.execl(INTERP, INTERP, *sys.argv) 

from myapp import app as application 

if DEBUG: 
    application.debug=True 
    from werkzeug_debugger_appengine import get_debugged_app 
    application = get_debugged_app(application) 

Vergessen Sie nicht, Passagier zu zwingen, neu zu starten:

touch ~/domain.com/tmp/restart.txt 

, Nun, wenn Sie schlagen eine Ausnahme, Sie Ich werde eine Seite bekommen, die so aussieht:

Werkzeug Debugger Output

+0

Sie sind ein Lebensretter ... –