2011-08-24 23 views
8

Mogę przejrzeć wszystko na ich wiki - a potem jestem zagubiony. http://wiki.dreamhost.com/DjangoRozmieszczanie aplikacji Django za pomocą pasażera

Mam pusty szablon Django, a za każdym razem, gdy próbuję coś zmienić, pojawia się błąd wewnętrzny serwera 500.

Całkowicie rozwinąłem moją aplikację django na miejscu i po prostu chcę hostować ją online - doszedłem do wniosku, że będzie to łatwe, ale powoli uczę się, że tak nie jest.

Przesyłam moją aplikację "wideo" do tego katalogu, a następnie umieszczam ją w zainstalowanych aplikacjach i uruchamiam "python manage.py syncdb", która nie znajduje żadnych urządzeń (które znalazłem jako nieparzyste).

Stamtąd otrzymuje wewnętrzny błąd serwera.

Tutaj jest błąd otrzymuję: http://tweettune.com/ i tutaj jest dziennik błędów:

[Wed Aug 24 01:49:15 2011] [error] [client 66.212.30.122] Premature end of script headers: 
[Wed Aug 24 01:49:15 2011] [error] [client 66.212.30.122] Premature end of script headers: internal_error.html 
[Wed Aug 24 08:16:40 2011] [error] [client 99.229.160.94] Premature end of script headers: 
[Wed Aug 24 08:16:41 2011] [error] [client 99.229.160.94] Premature end of script headers: internal_error.html 
[Wed Aug 24 08:21:38 2011] [error] [client 99.229.160.94] Premature end of script headers: 
[Wed Aug 24 08:21:38 2011] [error] [client 99.229.160.94] Premature end of script headers: internal_error.html 
[Wed Aug 24 08:27:41 2011] [error] [client 99.229.160.94] Premature end of script headers: 
[Wed Aug 24 08:27:41 2011] [error] [client 99.229.160.94] Premature end of script headers: internal_error.html 

Próbowałem przez 6 godzin, a teraz nie może dowiedzieć się, co robię źle. Przypuszczam, że po prostu nie rozumiem, jak wdrożyć aplikację - mój proces myślowy polega teraz na zabraniu mojej lokalnie hostowanej aplikacji i zastąpieniu wszystkich plików w domyślnym szablonie django online. Nie rozumiem, dlaczego to nie powinno działać, ale nie jest. Próbowałem „Hello World” app przykład za pomocą tego kodu w moim pliku passenger_wdgi i to działa ...

def application(environ, start_response): 
    start_response('200 OK', [('Content-type', 'text/plain')]) 
    return ["Hello, world!"] 

Wszelkie kierunku byłoby pomocne.

EDIT: Oto treść mojego passenger_wsgi.py pliku, które mogą być pomocne (choć jest on automatycznie generowany przez DreamHost ... więc zorientowali byłoby poprawne).

import sys, os 
sys.path.append(os.getcwd()) 
os.environ['DJANGO_SETTINGS_MODULE'] = "sotd.settings" 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 
project_path='/home/tweettune.com/sotd/' 
sys.path.insert(1, project_path) 
+0

Pokaż swoje pliki konfiguracyjne. –

+0

Niestety, nie jestem pewien, co masz na myśli przez moje pliki konfiguracyjne? Treści passenger_wsgi.py? Proszę wybaczyć moją niewiedzę na ten temat - po raz pierwszy próbuję wdrożyć projekt. – brandonmat

+0

Myślę, że masz złe ścieżki. Przejdź do katalogu projektu w powłoce i użyj polecenia 'pwd', aby wydrukować pełną nazwę tego katalogu. – Marcin

Odpowiedz

1

Trudno dokładnie określić, co robisz źle, nie widząc konfiguracji. Postępowałem zgodnie z instrukcjami i nie było to takie trudne.

Jedną rzeczą, którą można zrobić, aby zdebugować aplikację, jest wykonanie przez program manage.py. Nie będzie w stanie połączyć się z gniazdem (a jeśli to zrobi, zostanie zaognione po kilku minutach), ale to przynajmniej pokaże, czy są inne problemy, które uniemożliwiają uruchomienie aplikacji.

Jedna rzecz do zapamiętania: plik nosi nazwę passenger_wsgi.py i powinien znajdować się w katalogu głównym witryny. Na przykład mam ~/testing.tustincommercial.com/passenger_wsgi.py, a cały mój kod projektu mieszka pod numerem ~/testing.tustincommercial.com/oneclickcos. Moja statyczna treść znajduje się pod ~/testing.tustincommercial.com/public.

Może pomóc zainstalować jakieś oprogramowanie pośredniczące do obsługi błędów, aby błędy nie rozprzestrzeniały się aż do pasażera, powodując błąd 500.

My wsgi_passenger.py jest:

import sys, os, re 
cwd = os.getcwd() 
sys.path.append(os.getcwd()) 

#add all installed eggs to path 
for x in ['/home/marcintustin/django/'+x for x in os.listdir('/home/marcintustin/django/') if re.search('egg$', x)]: 
    sys.path.insert(0,x) 

sys.path.insert(0,'/home/marcintustin/django') 
sys.path.insert(0,'/home/marcintustin/django/Django-1.3') 
sys.path.insert(0,'/home/marcintustin/django/Paste-1.7.5.1-py2.5.egg') 
sys.path.insert(0,'/home/marcintustin/django/South-0.7.3-py2.5.egg') 
sys.path.insert(0,'/home/marcintustin/django/Werkzeug-0.6.2-py2.5.egg') 

myapp_directory = cwd + '/oneclickcos' 
sys.stdout = sys.stderr 
sys.path.insert(0,myapp_directory) 
sys.path.append(os.getcwd()) 

os.environ['DJANGO_SETTINGS_MODULE'] = "oneclickcos.settings" 
import django.core.handlers.wsgi 
#from paste.exceptions.errormiddleware import ErrorMiddleware 
from werkzeug.debug import DebuggedApplication 
from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException 

application = django.core.handlers.wsgi.WSGIHandler() 
handler = AdminMediaHandler(application, '/home/marcintustin/testing.tustincommercial.com/public/static/admin') 
application = DebuggedApplication(handler, evalex=True) 

to robi kilka rzeczy, z których większość nie jest to bezwzględnie konieczne - wszystkie rzeczy w górze jest, aby upewnić się, że biblioteki mam zainstalowane są dostępny. Rzeczy na dole instaluje oprogramowanie pośrednie. Prawdopodobnie lepiej będzie z paste.exceptions.errormiddleware.ErrorMiddleware, chyba że debugger werkzeug będzie działał dla ciebie (nie zadziała dla mnie w Dreamhost).

Edytuj: Myślę, że Twoja konfiguracja jest nieprawidłowa.Przejdź do katalogu zawierającego projekt i użyj pwd, aby uzyskać pełną ścieżkę. Myślę, że przekonasz się, że nie masz dobrych dróg.

+0

Przypuszczam, że mam wtedy pytanie. Czy spodziewam się zobaczyć normalne błędy debugowania django, jeśli wystąpił problem z moją instalacją, czy też po prostu zwróci błąd 500 serwera? – brandonmat

+0

Błąd 500 może być spowodowany przez wyjątki od twojego kodu rozprzestrzeniającego się na samą górę lub przez problem z twoją konfiguracją. Celem instalacji oprogramowania pośredniego jest przechwytywanie i wyświetlanie wyjątków wychodzących z kodu. Zła konfiguracja spowoduje błąd 500, ale nie jest to jedyne możliwe źródło. – Marcin

+0

Odpowiedź PWD - /home/brandonmattalo/tweettune.com i moim projektem django jest /home/brandonmattalo/tweettune.com/sotd – brandonmat

7

Miałem ten sam problem. Rozwiązaniem było dodać folder z mojego wniosku w wsgi_passenger.py

import sys, os 
sys.path.append(os.getcwd()) 
sys.path.append(os.path.join(os.getcwd(), 'include your apps folder here')) 
os.environ['DJANGO_SETTINGS_MODULE'] = "cpc.settings" 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

Ten link był bardzo przydatny do mnie: http://discussion.dreamhost.com/thread-128918.html

0

miałem dokładnie ten sam problem. Odpowiedzi skierowały mnie w dobrym kierunku, dzięki. Używam virtualenv z moją aplikacją django, a os.getcwd() zrobiła to za mnie.

import os, sys 

#Fix for passenger 
INTERP = "/var/webapps/myapp_env/bin/python" 
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv) 
sys.path.append(os.getcwd()) 
# 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 
7

przypadku korzystania Django> 1,7 zastąpić dwa ostatnie linię

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application()