14

我正在尝试运行一些 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。如何在不手动重命名文件夹的情况下使其识别正确的 1.9.3 版本~/.rbenv?我也可以更改.ruby-version1.9.3-p448,但这意味着该项目将取决于我的 Ruby 1.9.3 的特定“补丁”,这很糟糕。

4

2 回答 2

15

rbenv 不允许这样做。从维基

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

mislav来自A Common .ruby-version File For Ruby Projects的评论:

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

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

我们拥有版本管理器的重要原因之一是要精确地了解版本。rbenv 将是精确的。如果您想要可爱的快捷方式和别名,您可以随时创建符号链接。

备择方案

  • .ruby-version通过设置环境变量覆盖文件RBENV_VERSION(例如,通过运行当前shell rbenv shell 1.9.3-p448)。
  • 的符号链接1.9.3,有关详细信息1.9.3-p448,请参阅rbenv-aliases
于 2013-09-05T12:38:00.710 回答
2

试试chruby。它允许红宝石的模糊匹配,所以,ruby-1.9应该都可以工作。1.9.3jruby

于 2014-02-17T23:56:00.340 回答