Últimamente he estado lidiando con un problema bastante extraño. Mi backend tiene configuración httpd + mod wsgi + Django.
Tengo una vista basada en clases de la siguiente manera:
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)La solicitud de obtención de la vista anterior funciona perfectamente 9 de cada 10 veces. Sin embargo, aleatoriamente esta vista daría una respuesta con el estado 500. Según el registro de apache, parece que la longitud del cuerpo de la respuesta es correcta, es decir, la longitud de los datos en el archivo. Esto se verifica mediante los registros de acceso de Apache.
¿Alguien tiene una idea de por qué esto podría estar sucediendo? Revisé los registros de errores y no hay nada en el registro de errores. El registro de errores imprime rastreos en caso de excepciones u otros errores de sintaxis, solo que en este caso no imprime nada, así que no tengo ni idea. No hace falta decir que el archivo que se lee es un archivo estático que existe al 100%.
Los datos en el archivo son enormes, su longitud es de unos 30-40k caracteres. ¿Esto causaría un problema? En caso afirmativo, ¿por qué funciona 9 de cada 10 veces?
Cualquier comentario es bienvenido.
¿Por qué no devuelve el archivo json directamente en lugar de cargarlo como json y devolverlo? Algo como
def get(self, request) with open(path, encoding='utf-8') as f: return Response(f.read())