Ubuntu 18.04部署Graphite-web 1.0.2遇内部服务器错误求助
解决Ubuntu 18.04上Graphite-web 1.0.2的Internal Server Error问题
从你提供的Apache错误日志来看,核心问题是Graphite-web 1.0.2和Ubuntu 18.04默认的Django版本不兼容。日志里的关键报错TypeError: context must be a dict rather than Context已经说明了原因:旧版Graphite的错误处理视图沿用了Django 1.x的Context对象语法,但Ubuntu 18.04自带的Django 2.x要求传入字典类型的上下文参数。
下面是快速修复的步骤:
修改Graphite的错误视图文件
打开Graphite的错误处理视图文件:sudo nano /usr/lib/python2.7/dist-packages/graphite/views.py找到其中的
server_error函数,原始代码大概是这样:def server_error(request, template_name='500.html'): """ 500 error handler. """ from django.template import Context, loader from django.http import HttpResponseServerError template = loader.get_template(template_name) return HttpResponseServerError(template.render(Context({})))把它修改为:
def server_error(request, template_name='500.html'): """ 500 error handler. """ from django.template import loader from django.http import HttpResponseServerError template = loader.get_template(template_name) return HttpResponseServerError(template.render({}))简单来说就是移除
Context的导入和调用,直接传入空字典作为上下文。重启Apache服务使修改生效
执行以下命令重启Apache:sudo systemctl restart apache2
完成以上步骤后,再访问Graphite-web应该就能正常加载了。另外补充一点:这个问题属于旧版Graphite对Django 2.x的兼容性bug,如果后续需要长期维护,你也可以考虑通过pip安装Django 1.11.x系列(该版本和Graphite 1.0.2完全兼容),不过修改视图文件是最直接的临时修复方案。
内容的提问来源于stack exchange,提问作者user9812063
相关产品推荐
相关产品推荐

