在 Gemfile 中设置 ruby​​ 版本

Posted

技术标签:

【中文标题】在 Gemfile 中设置 ruby​​ 版本【英文标题】:Set ruby version in Gemfile 【发布时间】:2014-04-21 01:45:34 【问题描述】:

我可以在Gemfile中设置ruby版本如下:

ruby '2.0.0'

但是如果我想要一个特定的版本为2.0.0-p353呢?

当我将它添加到 Gemfile 时,我得到:

Your Ruby version is 2.0.0, but your `Gemfile` specified 2.0.0-p353

甚至可以设置特定版本吗?

【问题讨论】:

【参考方案1】:

在 Bundler 1.3 及更早版本中,您 couldn’t specify the patchlevel:

ruby 指令明确排除了指定补丁级别的能力。 Ruby 补丁通常包含重要的错误和安全修复,并且非常兼容。

这在 1.5 版中有所改变,the docs now say:

ruby 指令中,:patchlevel 是可选的,因为补丁级别的版本通常是兼容的并且包含重要的安全修复。 patchlevel 选项检查 RUBY_PATCHLEVEL 常量,如果未指定,则捆绑程序将简单地忽略它。

所以你可以像这样指定补丁级别:

ruby '2.0.0', :patchlevel => '353'

【讨论】:

刚刚注意到您需要将patchlevel 指定为字符串。否则,bundler 会报错:The Ruby patchlevel in your Gemfile must be a string @AlexSmolov 看起来你是对的。文档一定是错误的。不过,Gemfile manual 中使用了一个字符串。【参考方案2】:

如果有人希望提醒您如何指定次要版本,(是的,叫我菜鸟)你可以这样做:

ruby ">=2.2"

这将允许使用 ruby​​ 2.2.4 进行“捆绑安装”调用。

【讨论】:

我找不到此文档,但可以找到此更改日志bundler.io/v1.12/whats_new.html#ruby-version-locking。你也可以这样做ruby "~> 2.2" @LinhDam,你的意思是~> 2.2.0

以上是关于在 Gemfile 中设置 ruby​​ 版本的主要内容,如果未能解决你的问题,请参考以下文章

在 Ruby 中设置 cookie 过期时间

在 Gemfile 和 .ruby-version Dotfile 中列出 Ruby 版本是一种不好的做法吗?

您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.0

您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.1

错误 Ruby“您的 Ruby 版本是 3.0.2,但您的 Gemfile 指定了 2.7.1”

无法运行 rails 命令。您的 Ruby 版本是 2.2.1,但您的 Gemfile 指定了 2.1.4