【发布时间】:2020-07-12 09:44:16
【问题描述】:
我最近一直在处理一个相当奇怪的问题。我的后端有 httpd + mod wsgi + Django 设置。
我有一个基于类的视图如下:
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)
上述视图的 get 请求在 10 次中有 9 次都能正常工作。但是,此视图会随机给出状态为 500 的响应。根据 apache 日志,似乎响应正文长度是正确的,即文件中的数据长度。这由 apache 访问日志验证。
有人知道为什么会发生这种情况吗?我检查了错误日志,错误日志中没有任何内容。如果出现异常或其他语法错误,错误日志会打印回溯,只是在这种情况下它不会打印任何内容,所以我一无所知。不用说,正在读取的文件是100%存在的静态文件。
文件中的数据量很大,长度约为 30-40k 个字符。这会引起问题吗?如果是,那为什么 10 次中有 9 次有效?
欢迎任何cmets。
【问题讨论】:
-
如果是静态文件,为什么不像其他静态文件一样提供它?
-
@IainShelvington 因为最终我想在发送响应之前添加一些逻辑来操作 json。
-
文件需要是json吗?您不能将生成的对象存储在 .py 文件中或作为视图模块中的常量吗?
-
我认为这不是一个好主意,尤其是考虑到我在帖子中提到的 JSON 的长度。此外,提供的代码是一个导致问题的准系统函数,如果我能够解决这个问题,我将拥有多个文件,并且我会根据 get 参数读取其中一个。
-
为什么长度很重要?您已经将文件读入内存。如果您不是在每次请求时都读取和解析文件,您的视图性能会大幅提升
标签: python django apache mod-wsgi httpd.conf