При переходе в производственную среду мое приложение сломалось

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

import sys, os
sys.path.append(os.getcwd())
sys.path.append(os.path.join(os.getcwd(), '/photosoc'))

os.environ['DJANGO_SETTINGS_MODULE'] = "photosoc.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Я получаю стандартную ошибку 404 (отладка все еще включена). Мне пришлось изменить свой файл URL-адресов, хотя с:

from django.conf.urls.defaults import patterns, include, url
from competition.models import Image
from competition import *
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
admin.site.register(Image)

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'photosoc.views.home', name='home'),
    # url(r'^photosoc/', include('photosoc.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
#   url(r'^image/$', 'competition.views.index'),
    url(r'^image/uploadImage', 'competition.views.uploadImage'),
    url(r'^image/uploadCompleted', 'competition.views.uploadCompleted'),
    url(r'^image/uploadFailed', 'competition.views.uploadFailed'),
)

urlpatterns += patterns('',
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))

К следующему:

from django.conf.urls.defaults import patterns, include, url
from competition.models import Image
from competition import *
from django.contrib import admin
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
admin.site.register(Image)

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'photosoc.views.home', name='home'),
    # url(r'^photosoc/', include('photosoc.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
#   url(r'^image/$', 'competition.views.index'),
    url(r'^image/uploadImage', 'competition.views.uploadImage'),
    url(r'^image/uploadCompleted', 'competition.views.uploadCompleted'),
    url(r'^image/uploadFailed', 'competition.views.uploadFailed'),
)

Это единственное изменение, которое я внес в приложение после перехода от разработки к производству. Так что еще могло пойти не так?


person Dean    schedule 25.01.2012    source источник
comment
на Dreamhost есть ли у вас доступ к журналам ваших веб-серверов? если он выдает 500, то ошибка должна быть где-то записана?   -  person dm03514    schedule 25.01.2012
comment
Вы должны попытаться получить доступ к журналам сервера, чтобы вы могли прочитать трассировку стека (и опубликовать ее здесь). Это даст вам гораздо лучшее представление о том, в чем может быть проблема.   -  person Timmy O'Mahony    schedule 25.01.2012
comment
если у вас нет доступа к журналам, вы должны указать адрес электронной почты администратора в настройках. Затем, когда вы НЕ в режиме отладки, приложение должно отправить вам по электронной почте стек ошибок. Вы все равно должны это сделать.   -  person GivP    schedule 25.01.2012


Ответы (2)


У вас может быть проблема с разрешением.

Похоже, вы пишете файлы изображений. Есть ли у процесса, в котором запущен Django, разрешение на запись файлов? Когда вы запускаете Django локально с ./manage.py runserver, Django получит разрешения пользователя, который запускается из командной строки, но в типичной производственной среде вы будете работать с разрешениями пользователя Apache. У этого пользователя может не быть разрешения на запись этих файлов изображений. Вы можете попробовать временно жестко закодировать каталог для записи в / tmp, чтобы увидеть, имеет ли это значение.

Конечно, вам действительно нужно увидеть трассировку стека 500 ошибок, чтобы знать, что происходит.

person Mark Chackerian    schedule 25.01.2012

В каких классах промежуточного программного обеспечения вы импортируете точно такие же настройки? Дважды проверьте, что это то же самое.

Связанный:

ModSecurity: выходной фильтр : Не удалось прочитать сегмент (RC 104): Сброс подключения одноранговым узлом

person Dean    schedule 25.01.2012