升级已发布Ruby Gem时遭遇C扩展加载失败问题求助
解决Ruby Gem xorcist升级时C扩展加载失败的问题
我在升级自己发布的Ruby Gem xorcist时,执行以下命令后遇到C扩展加载失败的错误:
git clone https://github.com/fny/xorcist && cd xorcist rbenv install 3.1.2 rbenv shell 3.1.2 rake test
报错信息:
~/.rbenv/versions/2.7.6/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require': cannot load such file -- xorcist/xorcist (LoadError)
主gem可以正常加载,但require 'xorcist/xorcist'指向的C扩展无法加载,且报错路径意外指向rbenv中的2.7.6版本(明明已经切换到3.1.2)。
排查与解决步骤
确认rbenv环境是否正确生效
先检查当前shell的Ruby及工具路径是否匹配3.1.2:ruby -v which ruby which rake如果
which rake输出2.7.6路径下的rake,说明rake未随Ruby版本切换。此时需在3.1.2环境下重新安装rake:gem install rake重新编译C扩展
切换Ruby版本后,旧版本编译的C扩展无法兼容,必须重新编译:rake clean rake compile编译完成后,检查
lib/xorcist/目录是否生成对应平台的扩展文件(如.so或.bundle)。确保测试任务加载本地扩展
检查Rakefile的测试任务配置,确保优先加载本地编译的扩展:task :test do $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__)) require 'xorcist/xorcist' # 后续测试逻辑... end或者用bundler锁定本地gem版本,避免调用全局依赖:
bundle install bundle exec rake test修复rbenv版本切换问题
如果rbenv shell 3.1.2未生效,可尝试在项目目录设置本地版本:rbenv local 3.1.2之后重启终端或执行
source ~/.bashrc(对应你的shell配置文件)使设置生效。
内容的提问来源于stack exchange,提问作者fny
相关产品推荐
相关产品推荐

