如何在debian squeeze上将ruby1.9.1设置为默认版本

时间:2011-08-06 06:49:40

标签: ruby ruby-on-rails-3 installation debian

我正在使用Debian Squeeze作为我的操作系统,并且正在尝试开发Ruby on Rails项目。为此,我首先安装了一些红宝石包。

我的ruby版本是:ruby1.8,ruby1.9.1

然后我卸载了ruby1.8以使ruby1.9.1成为我的默认ruby。

现在如果我跑:

$ which ruby

它什么也没显示。

如果我跑:

$ which ruby1.9.1
/usr/bin/ruby1.9.1

然而:

$ rails new testApp
bash: /usr/bin/rails: /usr/bin/ruby1.8: bad interpreter: No such file or directory

我不知道该怎么办。请指导我。

3 个答案:

答案 0 :(得分:12)

对于Debian squeeze(6.0):

首先确保卸载所有ruby和ruby1.8软件包。否则,它们将干扰即将为ruby 1.9设置的二进制文件/链接。

然后安装ruby 1.9软件包。尽管这些软件包名为“1.9.1”,但它们实际上是在Debian squeeze上安装了ruby版本1.9.2。虚拟包ruby1.9.1-full将安装ruby所需的所有包:

sudo aptitude install ruby1.9.1-full

在ri1.9.1包中为ri和manpage添加备用链接。 (这两行都是一个命令。)

sudo update-alternatives --install /usr/bin/ri ri /usr/bin/ri1.9.1 10 \
--slave /usr/share/man/man1/ri.1.gz ri.1.gz /usr/share/man/man1/ri1.9.1.1.gz

在ruby1.9.1包中为ruby,关联二进制文件和联机帮助页添加备用链接。 (这些行都是一个命令。)

sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 10 \
--slave /usr/share/man/man1/ruby.1.gz ruby.1.gz /usr/share/man/man1/ruby1.9.1.1.gz \
--slave /usr/bin/erb erb /usr/bin/erb1.9.1 \
--slave /usr/bin/gem gem /usr/bin/gem1.9.1 \
--slave /usr/bin/irb irb /usr/bin/irb1.9.1 \
--slave /usr/bin/rake rake /usr/bin/rake1.9.1 \
--slave /usr/bin/rdoc rdoc /usr/bin/rdoc1.9.1 \
--slave /usr/bin/testrb testrb /usr/bin/testrb1.9.1 \
--slave /usr/share/man/man1/erb.1.gz erb.1.gz /usr/share/man/man1/erb1.9.1.1.gz \
--slave /usr/share/man/man1/gem.1.gz gem.1.gz /usr/share/man/man1/gem1.9.1.1.gz \
--slave /usr/share/man/man1/irb.1.gz irb.1.gz /usr/share/man/man1/irb1.9.1.1.gz \
--slave /usr/share/man/man1/rake.1.gz rake.1.gz /usr/share/man/man1/rake1.9.1.1.gz \
--slave /usr/share/man/man1/rdoc.1.gz rdoc.1.gz /usr/share/man/man1/rdoc1.9.1.1.gz \
--slave /usr/share/man/man1/testrb.1.gz testrb.1.gz /usr/share/man/man1/testrb1.9.1.1.gz

请注意,这些都是以低替代优先级10安装的(--install标志之后但--slave标志之前的最后一部分)。这样做是希望Debian的未来版本将ruby 1.8和ruby 1.9作为替代系统的一部分并覆盖这些链接。

检查替代系统中的ri:

update-alternatives --display ri

结果:

ri - auto mode
link currently points to /usr/bin/ri1.9.1
/usr/bin/ri1.9.1 - priority 10
slave ri.1.gz: /usr/share/man/man1/ri1.9.1.1.gz
Current 'best' version is '/usr/bin/ri1.9.1'.

检查替代系统中的红宝石:

update-alternatives --display ruby

结果:

ruby - auto mode
link currently points to /usr/bin/ruby1.9.1
/usr/bin/ruby1.9.1 - priority 10
slave erb: /usr/bin/erb1.9.1
slave erb.1.gz: /usr/share/man/man1/erb1.9.1.1.gz
slave gem: /usr/bin/gem1.9.1
slave gem.1.gz: /usr/share/man/man1/gem1.9.1.1.gz
slave irb: /usr/bin/irb1.9.1
slave irb.1.gz: /usr/share/man/man1/irb1.9.1.1.gz
slave rake: /usr/bin/rake1.9.1
slave rake.1.gz: /usr/share/man/man1/rake1.9.1.1.gz
slave rdoc: /usr/bin/rdoc1.9.1
slave rdoc.1.gz: /usr/share/man/man1/rdoc1.9.1.1.gz
slave ruby.1.gz: /usr/share/man/man1/ruby1.9.1.1.gz
slave testrb: /usr/bin/testrb1.9.1
slave testrb.1.gz: /usr/share/man/man1/testrb1.9.1.1.gz
Current 'best' version is '/usr/bin/ruby1.9.1'.

答案 1 :(得分:9)

我在挤压盒上做的是默认使用ruby 1.9:

cd /usr/bin
ln -sf ruby1.9.1 ruby
ln -sf gem1.9.1 gem
ln -sf erb1.9.1 erb
ln -sf irb1.9.1 irb
ln -sf rake1.9.1 rake
ln -sf rdoc1.9.1 rdoc
ln -sf testrb1.9.1 testrb

我以这种方式运行了很多rails生产服务器,并且所有其他debian ruby​​软件包都没有被破坏,因为它们在/usr/bin/ruby1.8二进制文件上传递。

这不是“真正的debian方式”,但出于某种原因update-alternatives不支持在挤压中配置ruby。

在Ubuntu 11.10中,您可以运行update-alternatives --config ruby并选择所需的版本

我还建议您在开始安装任何宝石REALLY_GEM_UPDATE_SYSTEM=true gem update --system

之前更新rubygems

答案 2 :(得分:1)

虽然我没有直接回答您的问题,但我建议您尝试使用精彩的rvm(ruby版本管理器)工具(http://beginrescueend.com/)。当我尝试在Ubuntu上玩ruby时,它让我的生活变得更轻松。