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

Nik*_*ita 14 ruby rbenv

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

1.9.3
Run Code Online (Sandbox Code Playgroud)

我安装了最新的Ruby 1.9.3:

$ rbenv install 1.9.3-p448
Run Code Online (Sandbox Code Playgroud)

但是当我跑的时候ruby --version我得到了

rbenv: version '1.9.3' is not installed
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*fan 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-version在项目中加入了"ruby-1.9" ,一切都很顺利.
  3. 一段时间后,我安装了1.9.3-p300试用它,突然所有标有"ruby-1.9"的项目自动升级到它.宝石需要重新安装,原生扩展需要升级等.梦魇.

我们拥有版本管理器的一个重要原因是要准确了解版本.rbenv将是准确的.如果你想要可爱的快捷方式和别名,你可以随时制作符号链接.

备择方案

  • .ruby-version通过设置RBENV_VERSION环境变量来覆盖文件(例如,通过运行来为当前shell rbenv shell 1.9.3-p448).
  • 符号链接1.9.31.9.3-p448,看到rbenv-别名的详细信息.