【问题标题】:Require a specific version of RubyGems需要特定版本的 RubyGems
【发布时间】:2016-09-26 03:35:04
【问题描述】:

我想为一个项目提供一个特定版本的 RubyGems。我有一些测试在 2.5.x 上失败但在 2.6.x 上通过了,所以我想确保用户使用的是 2.6.x 或更高版本。我知道你可以 explicitly update the version 的 RubyGems,但是你能不能像普通 gem 一样“要求”一个特定的版本?

【问题讨论】:

  • 在什么情况下需要?
  • @tadman 以某种方式提醒试图运行测试和开发代码的开发人员,他们的 RubyGems 本身的版本低于要求的版本。运行bundle install 将安装正确的gem,但不会提及RubyGems。出现问题是因为ruby-2.3.1 安装了rubygems-2.5.x(目前),但我遇到的问题只能通过使用rubygems-2.6.x 解决。我想答案可能是“将其添加到文档中”,但由于可以检查其他所有内容,我希望这也可以。
  • 听起来像是“添加到文档”步骤。

标签: ruby rubygems


【解决方案1】:

您可以在config/initializers 中添加启动检查,如果 Ruby Gems 版本错误,Rails 将无法启动应用程序。

config/initializers/gem_version_check.rb 中创建一个新文件并将此代码添加到其中:

required_rubygems_version
if Gem.rubygems_version < Gem::Version.new(required_rubygems_version)
  raise RuntimeError,  "Ruby Gems version is #{Gem.rubygems_version}, but this project requires Ruby Gems >= #{required_rubygems_version} to be used."
end

如果启动时 Ruby Gems 版本错误,这将引发异常并导致应用初始化失败。

/Users/spock/devo/games/config/initializers/gems_version_check.rb:3:in `': Ruby Gems 版本是 2.4.8,但是这个项目需要 Ruby Gems >= 2.6 才能使用。 (运行时错误)

请注意,这会在每次启动 Rails 服务器时运行,并且在所有环境中都会运行,因此它还会执行健全性检查以确保测试和生产环境配置正确。

【讨论】:

  • 如果 ruby​​gems 曾经有一个两位数的次要版本号(例如 2.10.0),这种方法会给出误报。但到目前为止还没有!
  • 我为未来的 Rubyists 做了更强大的版本检查。
【解决方案2】:

我认为不可能在单个 Ruby 安装中从多个 ruby​​gems 版本中进行选择。但是您可以确保正在使用所需的版本。将以下内容放在应用程序启动早期将运行的位置,例如 Gemfile(它只是一个 Ruby 文件)的顶部,或不使用捆绑器的脚本的开头:

required_rubygems_version = '2.6.0'
if Gem.rubygems_version < Gem::Version.create(required_rubygems_version)
  raise "Please upgrade to rubygems #{required_rubygems_version}"
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多