升级到Rails 6后运行rails命令报LoadError: cannot load such file -- zip/zip错误
问题根源
从报错回溯可以定位到,是项目中依赖的axlsx 1.3.6版本加载时触发的错误:旧版axlsx依赖rubyzip < 1.0的版本,而rubyzip 1.0及以上版本将原引入路径zip/zip重构为zip,升级Rails 6时rubyzip版本被同步升级到1.0+,导致旧版axlsx找不到对应依赖文件。
可用解决方案
- 方案1(推荐):替换为社区维护的兼容版axlsx
原axlsx已经停止维护,社区fork的兼容分支为caxlsx,直接修改Gemfile即可:
修改后执行# 替换原有gem 'axlsx' gem 'caxlsx' # 如果之前用了axlsx_rails,也替换为对应兼容版本 gem 'caxlsx_rails'bundle install即可。 - 方案2:添加路径兼容补丁
如果你暂时不想更换axlsx版本,可以新增兼容补丁:在config/initializers目录下新建zip_compatibility.rb文件,写入以下内容:require 'zip' # 给旧版axlsx提供兼容的旧路径指向 Zip::Zip = Zip - 方案3(不推荐):锁定rubyzip旧版本
在Gemfile中强制锁定rubyzip到0.9.x版本:
该方案不推荐使用,旧版本rubyzip存在已知安全漏洞,且可能和其他依赖高版本rubyzip的gem冲突。gem 'rubyzip', '~> 0.9.9'
内容的提问来源于stack exchange,提问作者Ben Bagley
相关产品推荐
相关产品推荐

