需要特定版本的RubyGems

时间:2016-05-27 17:46:39

标签: ruby rubygems

我希望为项目提供特定版本的 RubyGems 。我有2.5.x的测试失败但是传递2.6.x,所以我想确保用户使用2.6.x或更高版本。我知道你可以explicitly update the version使用RubyGems,但是你可以以某种方式要求'像普通宝石一样的特定版本?

2 个答案:

答案 0 :(得分:2)

如果Ruby Gems版本错误,您可以在config/initializers中添加启动检查,以防止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“&#39;:Ruby Gems版本是2.4.8,但是这个项目需要使用Ruby Gems&gt; = 2.6 。 (RuntimeError)

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

答案 1 :(得分:2)

我不相信可以在单个Ruby安装中从多个rubygems版本中进行选择。但您可以确保使用所需的版本。将以下内容放在应用程序启动时尽早运行的位置,例如Gemfile的顶部(这只是一个Ruby文件),或者在不使用bundler的脚本的开头:

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