Rails 6.0.4启动puma时报config.ru undefined method load_server错误怎么办
触发原因
- 核心触发场景为Puma版本与Rails 6.0.4的内置Rack适配逻辑不兼容:Rails 6.0.4默认适配Puma 4.x系列,若手动升级到Puma 5.x/6.x版本,新版本移除了旧版
load_server相关调用接口,会直接触发该报错 - 其次为项目根目录下
config.ru文件被篡改,误删了Rails默认的启动引导代码,或额外添加了无效的load_server调用逻辑 - 少数情况为Bundle依赖冲突,本地环境存在多个版本的Puma/Rack包,服务启动时加载了错误版本的依赖
- 也可能是Spring预加载器缓存了旧的无效配置,导致启动时调用失效方法
排查思路
- 执行
bundle show puma查看当前项目绑定的Puma版本,确认是否超出Rails 6.0.4的兼容范围 - 打开项目根目录下的
config.ru文件,对比Rails 6默认配置,确认是否存在异常修改,默认配置如下:
# This file is used by Rack-based servers to start the application. require_relative 'config/environment' run Rails.application
- 执行
gem list puma检查本地全局安装的Puma版本,确认是否存在多版本冲突 - 执行
spring stop停止Spring预加载服务后重新启动服务,排查是否为缓存问题
解决方案
- 若为Puma版本过高导致的兼容问题:在Gemfile中锁定兼容的Puma版本后执行
bundle update puma即可gem 'puma', '~> 4.3' - 若为
config.ru配置错误:直接将文件内容替换为上方给出的Rails 6默认config.ru代码即可 - 若为依赖冲突:后续启动服务时使用
bundle exec puma命令,强制加载项目绑定的依赖版本,避免调用全局安装的高版本Puma - 若为Spring缓存问题:执行
spring stop清空缓存后,再重新运行服务启动命令即可
内容的提问来源于stack exchange,提问作者onedumbquestion
相关产品推荐
相关产品推荐

