Ubuntu从14.04开始在主软件库中提供Ruby 2.0,同时提供的还有1.9.3(软件包名称是ruby1.9.1)。不过由于Ruby 2.0在垃圾回收方面的显著改进,大量程序推荐使用Ruby 2.0,这时问题出现了。通过运行“ruby -v”可知:
Ubuntu 14.04中默认的Ruby版本是1.9.3,而Ruby 2.0则需要用命令“ruby2.0”运行,程序运行前必须设定好运行版本否则可能造成错误。 Kaijia一直使用GitLab管理代码,以前GitLab还支持Ruby 1.9.3,不过从GitLab 7.0开始,Ruby 1.9.3的支持就被移除了(毕竟运行Ruby 1.9.3的GitLab简直是内存杀手)。现在Kaijia需要使用Ruby 2.0运行GitLab,但是GitLab只支持系统默认的Ruby(即1.9.3)无法选择运行的版本,也无法通过指定运行命令“ruby2.0”设置Ruby版本;安装指南中也一直是编译安装Ruby 2.1,没有提到如何使用系统提供的Ruby 2.0,因此只能在系统层面上设置Ruby的全局默认版本。 Ubuntu 12.10及以后的版本提供一个ruby-switch小脚本实现全局Ruby版本的切换,同时也可以用update-alternatives命令来切换版本,但自从ruby1.9.1包直接写死默认路径后update-alternatives就无法使用了,ruby-switch的原作者也申请从Debian unstable源中移除了脚本,Ubuntu也同样将此包移除。因此可以说之前可用的方式全都失效了。 既然软性方法没有了,那就只能使用(不可复原的)硬方法了。硬方法即是强制替换/usr/bin/目录下与Ruby相关的符号链接到Ruby 2.0对应的版本,这样即可实现默认版本的切换:
替换完成之后还可以更新一下gem:
这时Ruby的默认版本就已经切换到2.0了。当然虽然这样做比较暴力,但也是可以还原的,如果想切换会Ruby 1.9.3,只需要运行(请注意在Ubuntu 14.04中,Ruby 1.9.3的名称为ruby1.9.1):
同样的,再更新一下gem之后Ruby就又切换回1.9.3了。 |