You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MacOS Sonoma 14.6.1环境下Ruby 2.6.10安装eventmachine 1.2.7失败,请求解决方法

MacOS Sonoma 14.6.1环境下Ruby 2.6.10安装eventmachine 1.2.7失败,请求解决方法

我完全能理解你给Jekyll博客执行bundle install时卡在上eventmachine安装的烦躁,结合你贴出的错误日志和mkmf.log内容,问题根源其实是两个:Ruby开发头文件缺失OpenSSL依赖版本不兼容/路径找不到,下面给你一步步落地的解决办法:

一、先解决Ruby头文件缺失问题(ruby/config.h找不到)

系统自带的Ruby默认没有包含完整的开发头文件,加上MacOS Sonoma的SDK路径变化,导致编译eventmachine的C扩展时找不到必要的头文件,解决步骤:

  • 安装或更新Xcode命令行工具:
    打开终端执行:
    xcode-select --install
    
    如果已经安装,终端会提示“xcode-select: error: command line tools are already installed, use "Software Update" to install updates”;如果未安装,会弹出安装引导窗口,按照提示完成即可。

二、解决OpenSSL依赖问题

从mkmf.log里的package configuration for openssl is not found可以看出,旧版本Ruby(2.6.10)和MacOS Sonoma自带的OpenSSL版本不兼容,且eventmachine 1.2.7对OpenSSL 3.x支持不佳,我们需要手动指定兼容的OpenSSL版本:

  1. 用Homebrew安装OpenSSL 1.1(eventmachine 1.2.7的兼容版本):
    brew install openssl@1.1
    
  2. 设置环境变量,让bundler在安装时使用这个OpenSSL路径:
    export LDFLAGS="-L$(brew --prefix openssl@1.1)/lib"
    export CPPFLAGS="-I$(brew --prefix openssl@1.1)/include"
    export PKG_CONFIG_PATH="$(brew --prefix openssl@1.1)/lib/pkgconfig"
    
  3. 重新执行bundle安装:
    bundle install
    

三、备选方案:用Ruby版本管理器规避系统Ruby的坑

系统自带的Ruby经常会有权限、依赖冲突的问题,长期来看,用rbenv或rvm这类版本管理器安装Ruby会更省心:

  • 安装rbenv和ruby-build:
    brew install rbenv ruby-build
    
  • 初始化rbenv(根据你的shell类型,比如zsh就执行下面的命令,bash的话替换成~/.bashrc):
    echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
    source ~/.zshrc
    
  • 安装Ruby 2.6.10:
    rbenv install 2.6.10
    
  • 在你的Jekyll博客目录下设置本地Ruby版本:
    rbenv local 2.6.10
    
  • 最后重新执行bundle install:
    bundle install
    

备注:内容来源于stack exchange,提问作者k-debugger

火山引擎 最新活动