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

Ruby 2.7.6下ox 2.10.0无法加载C扩展的解决问询

解决ox 2.10.0在Ruby 2.7.6下的C扩展加载问题

针对你执行bundle exec rails assets:precompile时遇到的LoadError: cannot load such file -- ox/ox错误,以下是几个无需升级ox或Ruby版本的规避方案:

方案一:手动修补ox源码并固化修改

  • 执行bundle show ox获取项目中ox gem的安装路径
  • 打开该路径下的lib/ox.rb,定位到第79行,将原有的require 'ox/ox'改为require_relative 'ox/ox'(对应PR的修复逻辑)
  • 修改后保存,重新运行资产预编译命令
  • 为避免后续bundle install覆盖修改,使用bundler的patch功能固化:
    1. 将修改内容生成.patch文件,放在项目目录下(如patches/ox_2.10.0_fix.patch)
    2. 在Gemfile中调整ox的引用:
      gem 'ox', '2.10.0', patch: 'patches/ox_2.10.0_fix.patch'
      
    3. 执行bundle install使patch生效

方案二:强制使用ox的纯Ruby版本

  • 执行bundle config build.ox --disable-extensions,配置bundler安装ox时跳过C扩展编译
  • 重新执行bundle install,此时ox会切换为纯Ruby实现
  • 注意:纯Ruby版本性能低于C扩展,但仅用于资产预编译场景通常可接受

方案三:临时替换加载逻辑

  • 在项目config/initializers目录下创建ox_fix.rb文件,添加以下代码(确保在ox加载前执行):
    unless defined?(Ox)
      ox_gem_path = Gem.loaded_specs['ox'].full_gem_path
      extension_path = File.join(ox_gem_path, 'lib', 'ox', 'ox')
      # 加载编译后的扩展文件(系统不同后缀可能为.so或.bundle)
      require extension_path
      # 加载ox主文件
      require File.join(ox_gem_path, 'lib', 'ox')
    end
    
  • 保存后重新运行资产预编译命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:25:39