我正在尝试运行一些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“补丁”,这很糟糕。
答案 0 :(得分:15)
rbenv不允许这样做。来自wiki:
来自 Ruby项目的常见.ruby-version文件的:其他版本管理器可能允许模糊版本匹配 从
.ruby-version
文件读取的字符串,例如他们可能允许“1.9.3” (没有补丁后缀)来匹配最新的Ruby 1.9.3版本。的 rbenv 不支持这个,因为这种行为是不可预测的 因此有害。
rbenv将支持
.ruby-version
,但绝对没有 模糊匹配。这就是为什么我认为模糊匹配是一个坏主意:
- 假设我安装了1.9.3-p0。
- 我在项目中将“ruby-1.9”放到了
.ruby-version
,一切都很好。- 过了一段时间后我安装了1.9.3-p300来尝试一下,突然间我所有的 标有“ruby-1.9”的项目会自动升级到它。宝石需要 重新安装,原生扩展需要升级等。梦魇。
醇>我们拥有版本管理员的一个重要原因是确切的 关于版本。 rbenv将是准确的。如果你想要可爱的快捷方式& 别名,你总是可以制作符号链接。
.ruby-version
环境变量覆盖RBENV_VERSION
文件(例如,通过运行rbenv shell 1.9.3-p448
为当前shell)。1.9.3
至1.9.3-p448
,有关详细信息,请参阅rbenv-aliases。答案 1 :(得分:2)
试试chruby。它允许Rubies的模糊匹配,因此ruby-1.9
,1.9.3
和jruby
都可以正常工作。