如何解决Ruby Compass 1.0.0/1.0.3版本的NoMethodError问题
问题成因及解决办法
成因
- Ruby版本不兼容:Compass 1.x系列依赖的
File.exists?方法在Ruby 3.0及以上版本里已被废弃,官方替换为不带末尾s的File.exist?。Fedora 38默认预装的Ruby版本是3.x,而你的Windows机器上Ruby版本应为2.x,因此不会触发该错误。 - Compass 1.x属于老旧版本,未适配Ruby 3.x的API变更。
解决办法
方法一:手动修改Compass源码修复
找到报错文件:/home/user1/.local/share/gem/ruby/gems/compass-1.0.0/lib/compass/installers/manifest.rb,打开后定位到第144行,将File.exists?替换为File.exist?。如果后续其他位置出现相同报错,按同样方式替换所有File.exists?即可。
方法二:安装适配Ruby 3.x的Compass分支
可安装社区维护的适配Ruby 3.x的Compass版本,执行以下命令:
gem install specific_install gem specific_install https://github.com/Compass/compass.git -b ruby3
方法三:降级Ruby到2.x版本
若无需Ruby 3.x的特性,使用rbenv或rvm这类版本管理工具安装Ruby 2.7.x版本,再重新安装Compass 1.x,即可兼容旧的File.exists?方法。
内容的提问来源于stack exchange,提问作者CCIB_8899
相关产品推荐
相关产品推荐

