rbenv 和 RVM 的动态 Gemfile Ruby 版本

Dynamic Gemfile Ruby version for both rbenv and RVM

我使用 rbenv,但其他团队成员使用 RVM。

在 Gemfile 中指定 ruby 2.x.x 版本时,我一直这样做:

ruby ENV['RBENV_VERSION'] || '2.2.4'

它从 rbenv 获取我正在使用的当前版本并将其用于 Gemfile。但是,在生产中,它不存在并使用 ||.

之后的指定版本

我一直在寻找在 RVM 中执行此操作的类似方法,最终目标是设置一个 Gemfile,所有开发人员都可以在其中使用他们的本地版本 Ruby 并为指定具体版本生产.

这将允许开发人员在项目中使用 rbenv 或 RVM,并且无需在每次使用尚未安装的版本处理项目时安装 Ruby 的新版本。

是否有任何 RVM 用户可以为我提供相当于 ENV['RBENV_VERSION'] 的 RVM?我找了很多都没有找到我喜欢的东西。

我能看到的最佳答案是让 RVM 用户通过团队商定的环境变量名称指定版本,并像“Specifying a Ruby version via the environment”一样使用,并在 Gemfile 中使用它。

要从任何 RVM 实例获取当前 Ruby 版本,您可以使用此方法查询它:

rvm list default string | sed s/ruby-//

也可以使用RVM提示工具查询当前版本

rvm-prompt i v | sed s/ruby-//

rvm-prompt i v p g | sed s/ruby-//

取决于您希望允许的详细程度。 rvm-prompt 命令的文档可以在“rvm-prompt”中找到。

如果用户选择保留 RVM 的默认版本,您会收到该版本的报告,但如果 Ruby 版本在 RVM 中已更改,您会收到当前选择的版本。

您可以使用 ENV['RBENV_VERSION'] 的任何方式链接它,例如:

`rvm list default string | sed s/ruby-//` || 2.2.4

这将选择当前 RVM Ruby 版本或 2.2.4(如果 RVM 未显示版本)。

请注意,RVM 必须存在(或者至少必须提供名为 rvm 的可执行文件)。如果没有,可能需要额外的脚本包装器来处理它不存在并优雅降级的情况。

就个人而言,我喜欢它随处可用,包括生产环境。这是我在新 OS 实例上安装的第一件事,甚至在文本编辑器之前,我做的第二件事是安装适当的 Ruby 版本和 RVM。