You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby 3.2.1 + Rails 7.1.1中zxing Gem问题:未初始化扩展

解决Ruby 3.2.1 + Rails 7.1.1中zxing Gem导致的扩展未构建与Ruby版本不匹配问题

问题根源

你遇到的核心矛盾是:虽然rbenv versions显示当前用的是Ruby 3.2.1,但启动服务器时Bundler检测到的是JRuby 3.1.4。这说明zxing Gem(或其依赖)强制触发了JRuby环境,导致原本基于CRuby 3.2.1构建的Gem扩展(如bcrypt、bigdecimal)无法在JRuby下加载,进而抛出“extensions not built”错误。

分步解决方案

1. 彻底清理zxing相关环境

  • 从Gemfile中移除zxing,执行:
    bundle install
    
  • 清理zxing的Gem缓存:
    gem cleanup zxing
    
  • 检查并卸载残留的JRuby相关Gem(如果有):
    gem list | grep jruby
    gem uninstall [找到的JRuby相关Gem名]
    

2. 锁定当前环境为CRuby 3.2.1

  • 确认本地项目的Ruby版本锁定:
    rbenv local 3.2.1
    
  • 重启终端,验证当前Ruby版本(确保不是JRuby):
    ruby -v
    
  • 检查Bundler环境的Ruby版本是否一致:
    bundle env
    

3. 重新安装兼容CRuby的zxing版本

  • 查看zxing Gem的版本说明,选择支持Ruby 3.2.1的版本,在Gemfile中明确指定(示例):
    gem 'zxing', '~> 0.2.3'
    
  • 强制重新构建所有Gem的扩展:
    bundle install --force
    
  • 如果仍有个别Gem的扩展错误,手动重建:
    bundle exec gem pristine bcrypt bigdecimal bootsnap
    

4. 安装zxing所需的系统依赖

zxing依赖系统级的条码识别库,需提前安装:

  • Ubuntu/Debian:
    sudo apt-get install libzbar0 libzbar-dev
    
  • macOS(Homebrew):
    brew install zbar
    

zxing Gem与其他Gem错误的关联

zxing部分版本依赖JRuby环境,或其安装脚本会自动切换到JRuby执行。当Bundler加载zxing时,会强制使用JRuby 3.1.4(而非你指定的CRuby 3.2.1),导致所有依赖CRuby原生扩展的Gem(如bcrypt、bigdecimal)无法在JRuby环境中正常加载,因此批量抛出“extensions not built”错误。移除zxing后,Bundler回到CRuby环境,所有扩展恢复正常。

内容的提问来源于stack exchange,提问作者Andres Garzon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:52:52