RVM/rbenv 迈向 Ruby 3,一个也不能少

ccmywish · 2020年12月13日 · 最后由 ruby117 回复于 2020年12月14日 · 887 次阅读

前言

从 RVM 切换到 rbenv 有一段时间了,一直用着自己写的小脚本安装管理。最近在国内服务器上使用时,发现 rbenv 和 RVM 都卡死安装不了,这才意识到,我的脚本其实完全没用,而是我的校园网可以直接访问。。。国内服务器上用上 Ruby3 真是难上加难。

Ruby China 的 wiki 提到的关于 rbenv 使用镜像的方法已经失效了 (@huacnlee),环境变量RUBY_BUILD_MIRROR_URL其实一直都对国内用户无用 (见issue) . 很多人在这上面做了努力,但是总会或多或少的使用到外网,比如@andor_chen这个 Github 仓库 , 其实我的服务器连 Github 仓库都 Pull 不下来 :(

值得庆幸的是,在 10 天前,hsbtruby-build中合并了国内开发者 uzxmxpull request 添加了新的环境变量 RUBY_BUILD_MIRROR_PACKAGE_URL ,这个可以用来直接指定下载的链接, 我利用这点 hack 了一下简化了安装 Ruby 的过程。

WARNING: 经过实验,发现 RUBY_BUILD_MIRROR_PACKAGE_URLRUBY_BUILD_MIRROR_URL会起冲突,不要再使用后者了

虽然很多人可以直接访问外网,但是还是存在许多机器没有这个条件。于是我完善了一整套国内安装卸载脚本,迈向 Ruby3, 每一个人都不能少。


rbenv-CN 介绍

源代码链接 Gitee

rbenv (plus ruby-build) 国内安装脚本,保证不需要任何外网,依然可以体验到最新的 Ruby. 其中 ruby-build 由 Gitee 官方镜像管理,每天更新,这是管理 Ruby 版本的真正仓库,所以不用担心更新不及时。

支持 Bash, Zsh 暂不支持 Fish, PowerShell

使用

# 除了rbenv,额外添加了三个命令 
# 1. `rbenv-update` 
# 2. `rbenv-mirror`
# 3. `rbenv-sudo`

# 当有新Ruby版本出现时,使用rbenv-update来同时更新 rbenv 和 ruby-build 插件
rbenv-update

# 查看支持的Ruby版本
rbenv install -l-L 

# 此命令自动从Ruby China提供的镜像上下载某指定版本的Rub,y并接着运行编译等过程
# 该命令用来替换常见的 rbenv install 3.0.0-preview2
rbenv-mirror 3.0.0-preview2

# 新添加了rbenv-sudo命令
# 没有此命令时无法 sudo rails s -p 81 等需要更高权限的操作,这是RVM和rbenv共同的问题
# 使用此命令来替换 sudo 如:
rbenv-sudo rails s -p 81

使用前后对比如图:

一键安装

bash -c "$(curl -fsSL https://gitee.com/RubyKids/rbenv-cn/raw/master/install.sh)"

一键卸载

bash -c "$(curl -fsSL https://gitee.com/RubyKids/rbenv-cn/raw/master/uninstall.sh)"

翻墙不就可以了

本地才会用吧,服务器都容器了,基础镜像自带。

记得压缩包本地添加也可以的吧

Jim 回复

在国外不就也可以了 😅

pynix 回复

是的,我说的卡死包括两个方面,第一个方面是安装 rbenv 本身,第二个是用 rbenv 安装 Ruby。第一个问题用容器自带的就行了,第二个问题,等新版本 Ruby 出来时,还是要访问 cache.ruby-lang.org 去下载。对于不想连外网的机器,直接利用 Ruby China 的缓存下载就行了,省去了很多麻烦。

ruby117 回复

来点自动化吧,不想每次动手了。😁

ccmywish 回复

实在想不到哪种情况下要经常装环境😂

ccmywish WSL 环境下 rbenv 最高只有 2.5.0-dev 版本 中提及了此贴 12月18日 12:12
需要 登陆 后方可回复, 如果你还没有账号请 注册新账号