如何在rbenv与rvm安装的不同Ruby on Rails版本间切换?
关于rbenv和rvm安装的Ruby/Rails版本切换问题
嘿,这个问题问到点子上了——同时用rbenv和rvm来管理Ruby版本,确实很容易让人困惑能不能顺畅切换。直接给你结论:这俩工具是互相排斥的,没办法轻松在它们安装的版本之间直接切换,原因和解决办法我给你掰扯清楚:
为什么不能轻松切换?
rbenv和rvm都是通过修改shell的环境变量(尤其是PATH)来控制当前生效的Ruby版本,但它们的实现逻辑完全不同。如果你的终端同时加载了这两个工具的初始化脚本,它们会互相抢占PATH的优先级,导致:
- 你明明想用rbenv安装的Ruby 2.2,结果系统调用的却是rvm里的Ruby 2.4,反过来也一样
- 切换命令混乱:rbenv用
rbenv local 2.2.x/rbenv global 2.2.x,rvm用rvm use 2.4.x/rvm use 2.4.x --default,混用的话连你自己都容易搞混,更别说系统了
那如果非要用两边的版本,怎么处理?
有两种思路,但都算不上“轻松”:
- 临时禁用其中一个工具:比如你想切换到rbenv的Ruby 2.2,先在终端执行
rvm use system把rvm切回系统Ruby,再确保rbenv的初始化脚本生效;反过来想用rvm的版本,就unset掉rbenv相关的环境变量,再加载rvm。但每次切换都要手动操作,挺麻烦的。 - 统一版本管理工具(推荐):最省心的办法是卸载其中一个工具,把所有Ruby版本统一用同一种工具管理。比如卸载rvm后,用rbenv重新安装Ruby 2.4和Rails 5.2;或者卸载rbenv,用rvm重新安装Ruby 2.2和Rails 4.2。这样切换版本就顺畅了:
- 用rvm的话,执行
rvm list看所有已安装版本,rvm use 2.2.x就能直接切换到对应版本,Rails 4.2也会跟着生效 - 用rbenv的话,执行
rbenv versions查看版本,rbenv local 2.4.x就能在当前目录切换到Ruby 2.4,对应的Rails 5.2自然可用
- 用rvm的话,执行
补充个小细节
不管用哪种工具,Rails都是安装在对应Ruby版本的gem环境里的(rvm有gemset,rbenv可以搭配rbenv-gemset插件),所以只要Ruby版本切换正确,对应的Rails版本就会自动生效,不用额外切换Rails。
内容的提问来源于stack exchange,提问作者Rowan A. Boat
相关产品推荐
相关产品推荐

