我正在使用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
我不知道该怎么办。请指导我。
答案 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
答案 2 :(得分:1)
虽然我没有直接回答您的问题,但我建议您尝试使用精彩的rvm(ruby版本管理器)工具(http://beginrescueend.com/)。当我尝试在Ubuntu上玩ruby时,它让我的生活变得更轻松。