2010-01-05 19 views
0

我已經克隆了ruby 1.8.7源代碼樹。我可以構建紅寶石。但我不知道如何在沒有將它安裝到系統目錄中的情況下運行它。我該怎麼做?構建並運行ruby而不將其安裝到系統目錄

背景:我想使用「git bisect」來確定哪個版本的Ruby在我的代碼中引入了新的行爲。我需要多次構建和運行鍼對測試程序的ruby,但我不想破壞Debian軟件包安裝的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 

我有這樣的感覺,我很接近,但一個小姐就像一英里一樣好。

回答

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] 
2

當我需要這樣做時,我使用chroot命令。創建一個臨時目錄,將ruby安裝到sbin子目錄中,並將chroot安裝到臨時文件夾中。根據您測試的內容,您可能還需要將一些系統庫複製到臨時目錄樹中(在chroot之前)。

0

使用rvm來測試您的應用對不同的紅寶石可能更容易。

相關問題