Django / Apache возвращает HTTP 500 в случайном порядке - PullRequest
1 голос
/ 31 марта 2020

В последнее время я сталкиваюсь с довольно странной проблемой. Мой бэкэнд имеет httpd + mod wsgi + Django setup.

У меня есть представление на основе классов следующим образом:

class ExtrasView(View):

def get(self, request):
    path = settings.BASE_DIR + "/data.json"
    with open(path, encoding='utf-8') as f:
        data = json.loads(f.read())
    return JsonResponse(data)

Запрос на получение в представлении выше работает отлично 9 из 10 раз. Однако случайным образом это представление даст ответ со статусом 500. На основании журнала apache кажется, что длина тела ответа правильная, то есть длина данных в файле. Это подтверждается apache журналами доступа.

У кого-нибудь есть идеи, почему это может происходить? Я проверил журналы ошибок, и в журнале ошибок ничего нет. Журнал ошибок выводит обратные вызовы в случае исключений или других синтаксических ошибок, просто в этом случае он ничего не печатает, поэтому я ничего не понимаю. Само собой разумеется, что читаемый файл является файлом c, который существует на 100%.

Данные в файле огромны, его длина составляет около 30-40 тыс. Символов. Это вызвало бы проблему? Если да, то почему это работает 9 из 10 раз?

Любые комментарии приветствуются.

1 Ответ

0 голосов
/ 31 марта 2020

Почему бы вам просто не вернуть файл json напрямую, вместо того, чтобы загрузить его как json и вернуть его. Что-то вроде

def get(self, request)
    with open(path, encoding='utf-8') as f:
        return Response(f.read())
...