MacOS下rails s启动失败:无法加载nokogiri/nokogiri(LoadError)
解决MacOS休眠后Rails启动触发nokogiri LoadError的问题
问题根源
MacOS休眠唤醒后,系统动态链接库缓存或Ruby的gem加载路径会出现异常,尤其是当你通过bundle install --path vendor/bundle把gem安装到项目本地vendor目录时,nokogiri的原生扩展文件路径会无法被正确识别,从而抛出cannot load such file -- nokogiri/nokogiri (LoadError)。
永久修复方案
1. 取消gem本地路径安装(推荐)
打开项目根目录下的.bundle/config文件,删除或注释BUNDLE_PATH: "vendor/bundle"这一行,然后执行:
bundle install
这样gem会安装到Ruby全局环境或rbenv/rvm的专属gem目录,避开本地路径在休眠后的加载错乱问题。
2. 重置Ruby加载缓存
每次休眠后无需重装所有gem,只需重置Ruby的gem加载路径缓存:
bundle exec ruby -e 'Gem.clear_paths'
之后直接启动服务即可:
rails s # 或 ./bin/dev
3. 重新编译nokogiri原生扩展
如果缓存重置无效,直接重新编译nokogiri的原生扩展:
bundle exec gem uninstall nokogiri bundle exec gem install nokogiri --platform=ruby
也可以通过bundle配置强制编译:
bundle config build.nokogiri --use-system-libraries bundle install
4. 调整MacOS休眠模式(可选)
部分用户反馈关闭快速休眠能缓解这类问题,执行以下命令后重启电脑生效:
sudo pmset hibernatemode 0
⚠️ 注意:此操作会关闭休眠时内存写入磁盘的功能,若意外断电会丢失未保存数据,请谨慎使用。
快速临时修复
不想改动配置的话,每次休眠后无需删除整个vendor目录,仅重装nokogiri即可:
bundle install --force nokogiri
内容的提问来源于stack exchange,提问作者elfapperino
相关产品推荐
相关产品推荐

