运行Passenger standalone出现cannot load such file -- listen (LoadError)报错如何解决

错误产生原因
- 该报错本质是Passenger Standalone运行时依赖的
listenRuby gem缺失导致的加载失败。Passenger默认启用了文件变更监听功能,用于检测应用代码变更后自动重启服务,该功能完全依赖listengem实现。 - 未做特殊配置就触发该报错的常见场景如下:
- Ubuntu 20.04官方源提供的Ruby安装包裁剪了部分非核心的可选依赖,Passenger安装时没有自动补全该依赖项
- 如果你使用rbenv、RVM等Ruby版本管理工具,
listengem仅安装在了其他Ruby环境中,当前运行Passenger的环境没有安装该包 - 如果是在Rails等带Gemfile的项目中运行Passenger,
listen未被写入项目Gemfile,仅做了全局安装也会出现加载失败
修复方法
- 临时规避(不需要热重启功能时可用):启动Passenger时添加参数禁用监听功能,跳过该依赖:
passenger start --no-watch-restart - 永久修复:在当前运行Passenger的Ruby环境中安装
listen即可:
全局环境下执行:gem install listen
项目环境下将gem 'listen'添加到Gemfile后执行:bundle install
内容的提问来源于stack exchange,提问作者Kiffin
相关产品推荐
相关产品推荐

