Развертывание приложения Django с использованием пассажира - PullRequest
8 голосов
/ 24 августа 2011

Я могу пройти через все в их вики - и тогда я потерялся.http://wiki.dreamhost.com/Django

У меня есть пустой шаблон Django, и всякий раз, когда я пытаюсь что-либо изменить, я получаю 500 внутреннюю ошибку сервера.

Я полностью разработал свое приложение django локально и просто хочу разместить его в Интернете - подумал, что это будет легко, но постепенно узнаю, что это не так.

Я загружаю "видео" своего приложения вэтот каталог, затем поместил его в установленные приложения и запустил «python manage.py syncdb», который не находит никаких приборов (что я нашел странным).

Оттуда он просто получает внутреннюю ошибку сервера.

Вот ошибка, которую я получаю: http://tweettune.com/, а вот журнал ошибок:

[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

Я пытался в течение 6 часов и не могу понять, что яя делаю неправильноПолагаю, я просто не понимаю, как развернуть приложение - мой мыслительный процесс теперь заключается в том, чтобы взять мое локально размещенное приложение и заменить все файлы в стандартном шаблоне django онлайн.Я не понимаю, почему это не должно работать, но это не так.Я попробовал пример приложения "hello world", используя этот код в моем файле passenger_wdgi, и он работает ...

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

Любое направление будет полезно.

РЕДАКТИРОВАТЬ: Вот содержимое моего файла passenger_wsgi.py, который может быть полезен (хотя он автоматически генерируется Dreamhost ... так что подумал, что это будет правильно).

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)

Ответы [ 4 ]

7 голосов
/ 23 октября 2014

Если используется django> 1.7, заменить две последние строки на

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
7 голосов
/ 27 августа 2011

У меня была такая же проблема. Решением было добавить папку моего приложения в 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()

Эта ссылка была очень полезна для меня: http://discussion.dreamhost.com/thread-128918.html

1 голос
/ 24 августа 2011

Трудно точно понять, что вы делаете неправильно, не видя ваших настроек. Я следовал инструкциям, и это было не так сложно.

Одна вещь, которую вы можете сделать для отладки вашего приложения, - это запустить manage.py. Он не сможет привязаться к сокету (и если он это сделает, он будет автоматически убит через несколько минут), но это по крайней мере покажет, если есть другие проблемы, препятствующие запуску вашего приложения.

Еще одна вещь, на которую следует обратить внимание: файл называется passenger_wsgi.py и должен находиться в корне вашего сайта. Например, у меня есть ~/testing.tustincommercial.com/passenger_wsgi.py, а весь мой код проекта живет под ~/testing.tustincommercial.com/oneclickcos. Мой статический контент живет под ~/testing.tustincommercial.com/public.

Может помочь установление некоторого промежуточного программного обеспечения для обработки ошибок, чтобы ошибки не распространялись на весь пассажир, что приводит к возникновению ошибки 500.

Мой wsgi_passenger.py:

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)

Это делает кучу вещей, большинство из которых не являются строго необходимыми - все, что вверху - это чтобы убедиться, что установленные мной библиотеки доступны. Материал внизу устанавливает промежуточное программное обеспечение. Возможно, вам лучше использовать paste.exceptions.errormiddleware.ErrorMiddleware, если только отладчик werkzeug не работает для вас (он не будет работать для меня на Dreamhost).

Редактировать: Я думаю, что ваш конфиг неверен. Перейдите в каталог, в котором находится ваш проект, и введите pwd, чтобы получить полный путь. Я думаю, вы обнаружите, что не правильно поняли свои пути.

0 голосов
/ 07 июня 2013

У меня была точно такая же проблема.Ответы здесь направляют меня в правильном направлении, спасибо.Я использую virtualenv с моим приложением django, и os.getcwd () сделал это для меня.

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()
...