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