需要特定版本的 RubyGems

Require a specific version of RubyGems

我想为项目使用特定版本的 RubyGems。我的测试在 2.5.x 时失败,但在 2.6.x 时通过,所以我想确保用户使用的是 2.6.x 或更高版本。我知道您可以 explicitly update the version RubyGems,但是您能以某种方式 'require' 像普通 gems 那样的特定版本吗?

您可以在 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 version is 2.4.8, but this project requires Ruby Gems >= 2.6 to be used. (RuntimeError)

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

我认为不可能在单个 Ruby 安装中从多个 ruby​​gems 版本中选择 select。但是您可以确保正在使用所需的版本。将以下内容放在应用程序启动早期 运行 的某个位置,例如 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