Ubuntu 22.04运行compass watch报错:undefined method `exists?' for File:Class
解决Compass 1.0.3在Ruby 3.2.1下的
undefined method 'exists?' for File:Class报错 问题根源
Ruby 3.0及以上版本移除了File.exists?方法,替换为File.exist?(注意末尾无s)。你使用的Compass 1.0.3是2014年的旧版本,代码中仍在调用已被移除的方法,因此在Ruby 3.x环境下触发报错。之前Ubuntu 18.04能正常运行,是因为当时默认Ruby版本低于3.0,兼容该旧方法。
解决方案
方案一:降级Ruby版本到2.7.x(最稳定省心)
- 用asdf安装Ruby 2.7.x版本:
asdf install ruby 2.7.8 - 切换到项目目录,设置本地Ruby版本:
asdf local ruby 2.7.8 - 重新安装依赖(确保gem适配):
gem install sass compass
方案二:修改Compass源码(不降级Ruby,临时救急)
直接修改报错文件中的代码,替换已废弃的方法:
- 打开报错路径的文件:
$HOME/.asdf/installs/ruby/3.2.1/lib/ruby/gems/3.2.0/gems/compass-1.0.3/lib/compass/configuration/helpers.rb - 定位到第89行,把
File.exists?替换为File.exist? - 保存文件后重新运行
compass watch
注意:修改源码的方式是临时方案,后续重新安装Compass会失效,仅适合短时间应急。
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

