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