我正在尝试运行一些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.9.3-p0.
- 我
.ruby-version
在项目中加入了"ruby-1.9" ,一切都很顺利.- 一段时间后,我安装了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-别名的详细信息.