Rails 5.1.5升级后出现Mime::JSON未初始化常量错误求助
uninitialized constant Mime::JSON报错问题 刚升级到Rails 5.1.5就碰到这个坑是吧?别担心,这个问题我之前帮好几个开发者排查过,大概率是Rails 5.1+对MIME类型的处理逻辑变了导致的。
首先,你的控制器代码render json: @families本身是完全没问题的——Rails 5.1依然支持这种写法,所以问题肯定出在其他地方。下面是几个常见的排查和解决方向:
检查项目中是否直接引用了
Mime::JSON常量
Rails 5.1开始不再推荐直接使用Mime::JSON这种常量形式,而是改用Mime[:json]或者直接用符号:json。你可以全局搜索项目代码(比如用grep -r "Mime::JSON" .命令),找到所有引用这个常量的地方,把它们替换成Mime[:json]。比如如果有代码写了respond_to :html, Mime::JSON,就改成respond_to :html, :json或者respond_to :html, Mime[:json]。排查依赖gem的兼容性
如果项目里没有直接引用Mime::JSON,那很可能是某个第三方gem还在使用旧的写法,没有适配Rails 5.1。你可以查看Gemfile里的gem版本,尤其是和API、序列化、响应处理相关的gem(比如一些自定义的renderer、认证gem),把它们更新到支持Rails 5.1的最新版本。更新后记得重新执行bundle install并重启服务器。临时修复:重新注册JSON MIME类型(不推荐长期用)
如果上面两个方法都没解决,你可以尝试在config/initializers/mime_types.rb里手动注册JSON类型:Mime::Type.register "application/json", :json不过这其实是个临时方案,因为Rails默认已经注册了这个类型,真正常见的问题还是前面两种情况,所以优先排查前两个方向。
按照这个步骤来,应该很快就能解决问题。
内容的提问来源于stack exchange,提问作者Chris Habgood

