文章

博客&Ruby升级问题记录

萌新理解尚浅,文字多有纰漏。还请客官多多包涵。

前情提要

前几天升级本地chripy版本的时候,因为没按正常步骤拉取、合并,又碰上了Github actions升级,导致第一次推送失败。
Github Actions官方公告写了:从2025/01/30开始,actions/upload-artifact or actions/download-artifact的v3版本将会被弃用,应尽快改用v4版本。

这个要怎么“升级”?
前往.github\workflow中的workflow文件,将配置项改成最新v3/v4版本,就能完成“升级”。
但作者早已修复了这个bug。因此根据chripy官方Upgrade Guide,完成本地chripy存储库的升级即可。(我是按照“Upgrading from Starter”的步骤。Sass等核心文件因此没有更新到,未来可能会对项目进行搬家。)

合并不同存储库分支时,需要手动修复所有文件冲突,否则无法提交更新至git。

升级的最后,执行下述命令时被两次告知“发生了某个错误”。

1
bundle update

后面忘了,瞎升级升着就开始报错,所有的gem命令(如gem update --system)一旦运行就会报错。部分报错信息如下,错误都类似:

Invalid gemspec in [E:/Ruby32-x64/lib/ruby/gems/3.2.0/specifications/default/abbrev-0.1.1.gemspec]: undefined method target_rbconfig' for Gem:Module
Invalid gemspec in [E:/Ruby32-x64/lib/ruby/gems/3.2.0/specifications/default/base64-0.1.1.gemspec]: undefined method target_rbconfig' for Gem:Module
……

问题为何

经过多方折腾,最后大致搞清了问题所在:
Ruby和RubyGems的版本冲突

解决方案

总结下来的解决方法如下:

1. 卸载旧版Ruby

运行原Ruby目录下的“unistaller”。

Ruby在卸载时,不会自动删除用户添加的文件或配置,会有诸如bin/lib/msys64/等文件夹残留。
但我的Ruby是直接版本大升级,安装在了不同目录下。因此后来我把旧版Ruby的残留文件全删了,防止可能的版本冲突。

2. 手动安装新版Ruby

Ruby本身没有通过终端直接升级的命令,我们要手动到官网:RubyInstaller for Windows去下载安装包。

下载页面右边的FAQ解释写的很详细。暂时看不懂的话,看第一段“WHICH VERSION TO DOWNLOAD?”即可,它会告诉你最好下载哪个版本的Ruby。

之后按照正常流程,在任意目录下安装Ruby即可。
我的Windows 11显示了警告,不过可以忽视。

Ruby在安装时,会同时安装配对版本的RubyGems——一个属于Ruby的包管理工具,类似npm之于JavaScript、pip之于Python。

3. 重新下载被删掉的gems

长时间后再次更新gem时,记得前往RubyGems官网检查目标gem的最低兼容Ruby和RubyGems版本,防止gem升级后本地报错!

比如chripy版本7.2.4的RubyGems页面上,就明确定义了:Ruby ~> 3.1
意味着Ruby版本需大于3.1、但不能超过4.0。

我们进入项目文件夹下的终端窗口。

项目中有GemFile(描述项目运行都要依赖哪些gem,类似package.json之于vue)的话,执行命令:

1
bundle install

就能自动安装好项目所需的gem依赖。

经验总结

  1. GPT的回答经常绕来绕去,有时相似的问题,它能给你答出好几个答案来。要合理地采纳。
  2. 不要害怕看终端报错、文档等里面的英文——看清楚上面的报错信息,能为你省下 90% 在网上“大海捞针”的debug时间。
    但有的时候,不管是报错、还是GPT的答案,也会什么都看不懂。
    说明“你还太嫩了”。不要急,放个一年半载之后说不定就会了。
  3. 不同编程语言的底层概念是可以互相套用的。
    从这点来看,应该没有任何一门“学了一点用也没有”的语言。
    也是为什么别人说“语言会越学越快”的原因了——虽然我觉得每门语言的语法都挺复杂,短时间学不会。

参考链接

rubyinstaller | downloads
rubygems.org

本文由作者按照 CC BY 4.0 进行授权