Windows下Jekyll livereload报EventMachine错误,官方方案无效
Windows PowerShell 下 Ruby 2.7 x64 Jekyll 启动 EventMachine 加载错误修复方案
以下方案针对执行gem uninstall eventmachine、gem install eventmachine --platform ruby后仍报cannot load such file -- 2.7/rubyeventmachine (LoadError)的场景,这类操作无效的核心原因是:bundler会自动为项目拉回带错误预编译二进制的eventmachine版本,全局安装纯Ruby版的操作不会覆盖项目依赖锁记录的旧版本。
操作步骤
- 第一步:清理全量残留的eventmachine版本
在Jekyll项目根目录(即执行jekyll new生成的、包含Gemfile的site2目录)打开终端,依次执行:
执行后运行bundle exec gem uninstall eventmachine -aIx gem uninstall eventmachine -aIxgem list eventmachine,确认无残留版本输出。 - 第二步:锁死项目内eventmachine的安装规则
用文本编辑器打开项目根目录的Gemfile,在现有Jekyll相关gem声明行后追加一行:
保存后回到终端,给当前项目单独配置eventmachine的安装平台为纯Ruby,避免bundler自动拉取mingw预编译包:gem "eventmachine", "~> 1.2.7", require: falsebundle config set local.eventmachine --platform ruby - 第三步:重新安装项目依赖
执行:
安装完成后再次运行bundle installgem list eventmachine,确认输出的版本标注为ruby而非x64-mingw32。 - 第四步:兜底启动配置(如果仍报C扩展加载错误)
在项目根目录新建_plugins文件夹(如已存在则直接使用),在该目录下新建文件force_em_pure_ruby.rb,内容为:
保存后再执行启动命令:require 'em/pure_ruby'bundle exec jekyll serve --livereload
常见无效原因排查
- 系统默认PowerShell未加载Ruby Devkit的编译环境,导致纯Ruby版eventmachine实际编译失败,自动回退到预编译版:操作时优先通过RubyInstaller安装目录下的
Start Command Prompt with Ruby启动终端,再执行上述步骤,不要直接用系统默认PowerShell。 - 没有修改项目内的bundler配置,仅全局安装纯Ruby版eventmachine,项目依赖安装时会按照
Gemfile.lock的记录拉回旧的预编译版本,可执行bundle update eventmachine刷新锁文件后重试。
内容的提问来源于stack exchange,提问作者Mac
相关产品推荐
相关产品推荐

