如何让rbenv识别'1.9.3-p ***'Ruby版本?

时间:2013-09-05 11:19:12

标签: ruby rbenv

我正在尝试运行一些Ruby项目,项目正在使用.ruby-version文件。该文件仅包含:

1.9.3

我安装了最新的Ruby 1.9.3:

$ rbenv install 1.9.3-p448

然而,当我跑ruby --version时,我得到了

rbenv: version '1.9.3' is not installed

要解决此错误,我列出了~/.rbenv/versions/,其中包含文件夹1.9.3-p448。我将该文件夹重命名为1.9.3并运行rbenv rehash。这解决了这个问题。

看起来像-p448部分(它是什么意思?补丁?)混淆了rbenv。如何在不手动重命名~/.rbenv文件夹的情况下使其识别正确的1.9.3版本?我也可以将.ruby-version更改为1.9.3-p448,但这意味着该项目将取决于我特定的Ruby 1.9.3“补丁”,这很糟糕。

2 个答案:

答案 0 :(得分:15)

rbenv不允许这样做。来自wiki

  

其他版本管理器可能允许模糊版本匹配   从.ruby-version文件读取的字符串,例如他们可能允许“1.9.3”   (没有补丁后缀)来匹配最新的Ruby 1.9.3版本。的 rbenv   不支持这个,因为这种行为是不可预测的   因此有害。

来自 Ruby项目的常见.ruby-version文件的

mislav's comment

  

rbenv将支持.ruby-version,但绝对没有   模糊匹配。这就是为什么我认为模糊匹配是一个坏主意:

     
      
  1. 假设我安装了1.9.3-p0。
  2.   
  3. 我在项目中将“ruby-1.9”放到了.ruby-version,一切都很好。
  4.   
  5. 过了一段时间后我安装了1.9.3-p300来尝试一下,突然间我所有的   标有“ruby-1.9”的项目会自动升级到它。宝石需要   重新安装,原生扩展需要升级等。梦魇。
  6.         

    我们拥有版本管理员的一个重要原因是确切的   关于版本。 rbenv将是准确的。如果你想要可爱的快捷方式&   别名,你总是可以制作符号链接。

替代

  • 通过设置.ruby-version环境变量覆盖RBENV_VERSION文件(例如,通过运行rbenv shell 1.9.3-p448为当前shell)。
  • 符号链接1.9.31.9.3-p448,有关详细信息,请参阅rbenv-aliases

答案 1 :(得分:2)

试试chruby。它允许Rubies的模糊匹配,因此ruby-1.91.9.3jruby都可以正常工作。