用于rbenv和RVM的动态Gemfile Ruby版本

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

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

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

它抓取我从rbenv使用的当前版本并将其用于Gemfile.但是,在生产中,它不存在并在||之后使用指定的版本.

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

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

是否有任何RVM用户可以为RVM提供相当于ENV [‘RBENV_VERSION’]的内容?我一直在搜索,但没找到任何我喜欢的东西.

我能看到的最佳答案是让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保留为其默认版本,则会报告该版本,但如果在RVM中更改了Ruby版本,则会获得当前选择的版本.

您可以以任何使用ENV [‘RBENV_VERSION’]的方式对其进行链接,例如:

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

如果RVM没有显示版本,这将选择当前的RVM Ruby版本或2.2.4.

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

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

点赞