Django, nginx, gunicorn: почему на некоторых страница выдаёт Server Error (500)?

Не на всех, а избирательно.
Например функция random_video не работает, а video_list работает.
settings.py
import os
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS, AUTHENTICATION_BACKENDS

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]

SECRET_KEY = 'secret'

DEBUG = False

TEMPLATE_DEBUG = False

ALLOWED_HOSTS = ['.mydomain.ru']

INSTALLED_APPS = ('django.contrib.admin',
                  'django.contrib.auth',
                  'django.contrib.contenttypes',
                  'django.contrib.sessions',
                  'django.contrib.messages',
                  'django.contrib.staticfiles',
                  'django.contrib.sites',
                  'django_youtube',
                  'gdata',
                  'south',
                  'index',
                  'loginza',
                  'users',
                  'embed_video',
                  'for_parse',
                  'taggit',
                  'gunicorn',
)

SITE_ID = 1

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'myproject.urls'

WSGI_APPLICATION = 'myproject.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydatabase',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',  # Set to empty string for localhost.
        'PORT': '',  # Set to empty string for default.
    }
}


SOUTH_MIGRATION_MODULES = {
    'taggit': 'taggit.south_migrations',
}

LANGUAGE_CODE = 'ru-ru'

TIME_ZONE = 'Europe/Moscow'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'
STATIC_ROOT = '/home/myuser/projects/myproject/static/'

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
}


urls.py
from django.conf.urls import patterns, url, include

urlpatterns = patterns('myapp.views',
    # list of the videos
    url(r'^videos/$', 'video_list', name="myapp_video_list"),
    #random video
    url(r'^random/$', 'random_video', name='random_video'),
)


views.py
def video_list(request):
    videos_list = Video.objects.all()
    paginator = Paginator(videos_list, 42)
    page = request.GET.get('page')
    try:
        videos = paginator.page(page)
    except PageNotAnInteger:
        videos = paginator.page(1)
    except EmptyPage:
        videos = paginator.page(paginator.num_pages)

    return render_to_response(
        "django_youtube/videos.html",
        {"videos": videos},
        context_instance=RequestContext(request),
    )

def random_video(request):
    all_video = Video.objects.count()
    video11 = Video.objects.all()[random.randint(0, all_video)]
    video_params = _video_params(request, video11.video_id)
    video_params['video'] = video11
    video11.views += 1
    video11.save(update_fields=['views'])
    return render_to_response(
        "django_youtube/video.html",
        video_params,
        context_instance=RequestContext(request)
    )


логи ошибки в nginx
[08/Sep/2014:17:15:04 -0400] "GET /youtube/random/ HTTP/1.1" 500 38 "mydomain/video/eQIaa3dVKjc/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.94 Chrome/37.0.2062.94 Safari/537.36"

Остальные ничего не выдают.
  • Вопрос задан
  • 4422 просмотра
Решения вопроса 1
@FireGM Автор вопроса
Ошибка была в том, что он пытался получить несуществующие видео! Функция randint выдаёт цифру включительно.
all_video = Video.objects.count()
    video11 = Video.objects.all()[random.randint(0, all_video)]


А если было несуществующие видео, то дальше всё крашилось и выдавать должна была ошибку. Но у меня нет страницы для обработки ошибки, поэтому nginx выдавал обычною 500.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы