【问题标题】:Build and run ruby without installing it to system directories构建并运行 ruby​​ 而不将其安装到系统目录
【发布时间】:2010-01-05 17:41:02
【问题描述】:

我已经克隆了 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

我有一种近在咫尺的感觉,但错过就像一英里一样好。

【问题讨论】:

    标签: ruby debian


    【解决方案1】:

    rvm 是一个很棒的工具。并且应该能够处理在不同 ruby​​ 版本(甚至是一组 gem)之间切换的繁重工作。

    安装是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 安装到 temp 文件夹中。根据您正在测试的内容,您可能还必须将一些系统库复制到临时目录树中(在您之前 chroot 中)。

      【讨论】:

        【解决方案3】:

        使用rvm 可能更容易针对不同的红宝石测试您的应用。

        【讨论】:

          猜你喜欢
          • 2020-07-10
          • 1970-01-01
          • 2018-06-17
          • 1970-01-01
          • 2011-09-20
          • 2021-10-14
          • 2011-09-02
          • 1970-01-01
          • 2014-07-17
          相关资源
          最近更新 更多