我克隆了ruby 1.8.7源代码树。我可以建立红宝石。但我无法弄清楚如何在不将其安装在系统目录中的情况下运行它。我该怎么办?
背景:我想使用“git bisect”来确定哪个版本的Ruby在我的代码中引入了一个新行为。我需要多次针对测试程序构建和运行ruby,但我不想破坏Debian软件包安装的ruby。
如果我尝试运行我从源代码构建的ruby,那么这就是我得到的:
$ ./ruby -e 'puts RUBY_VERSION'
ÀÇ ÀÇ : ÀÇ ÀÇ : cannot open shared object file: No such file or directory - ÀÇ ÀÇ (LoadError)
我也尝试过安装它,但没有安装到系统目录中,并获得了堆栈跟踪:
$ ./configure --prefix=/home/wayne/tmp/ruby/installed --exec-prefix=/home/wayne/tmp/ruby/installed
$ make
$ make install
$ /home/wayne/tmp/ruby/installed/bin/ruby -e 'puts RUBY_VERSION'
/home/wayne/tmp/ruby/installed/lib/ruby/1.8/openssl/ssl.rb:26: uninitialized constant OpenSSL::SSL::VERIFY_PEER (NameError)
from /home/wayne/tmp/ruby/installed/lib/ruby/1.8/openssl.rb:23:in `require'
from /home/wayne/tmp/ruby/installed/lib/ruby/1.8/openssl.rb:23
我感觉自己很亲近,但是一次失误就像一英里一样。
答案 0 :(得分:3)
rvm是一个很棒的工具。并且应该能够处理繁重的工作,以便在不同的红宝石版本(甚至是几组宝石)之间切换。
安装是very easy:
$ gem install rvm && rvm-install
$ echo "if [[ ! -z $HOME/.rvm ]] ; then source $HOME/.rvm ; fi" >> ~/.bash_profile
然后到install特定版本&补丁级别:
rvm install ruby-1.8.7-p160
然后在版本之间切换:
$ rvm 1.8.7-p160
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 160) [i686-darwin10.0.0]
$ rvm 1.8.7-p174
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10.0.0]
答案 1 :(得分:2)
当我需要做类似的事情时,我使用chroot命令。创建一个临时目录,将ruby安装到sbin
子目录中,并将chroot
安装到temp文件夹中。根据您正在测试的内容,您可能还需要将一些系统库复制到临时目录树中(在chroot
之前)。
答案 2 :(得分:0)
使用rvm测试您的应用针对不同的红宝石可能更容易。