Je souhaite disposer d'une version spécifique de RubyGems pour un projet. J'ai des tests qui échouent pour 2.5.x mais qui réussissent pour 2.6.x, donc je veux m'assurer que les utilisateurs utilisent 2.6.x ou plus. Je sais que vous pouvez mettre à jour explicitement la version de RubyGems, mais peut-on en quelque sorte "exiger" une version spécifique comme on peut le faire pour les gemmes classiques ?
Réponses
Trop de publicités?Vous pouvez ajouter un contrôle de démarrage dans votre config/initializers
qui empêchera Rails de démarrer l'application si la version de Ruby Gems est erronée.
Créer un nouveau fichier dans config/initializers/gem_version_check.rb
et y ajouter ce code :
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
Cela lèvera une exception et fera échouer l'initialisation de l'application si la version de Ruby Gems est erronée au démarrage.
/Users/spock/devo/games/config/initializers/gems_version_check.rb:3:in `' : La version de Ruby Gems est 2.4.8, mais ce projet nécessite Ruby Gems >= 2.6 pour être utilisé. (Erreur d'exécution)
Notez que cette opération s'exécute à chaque fois que le serveur Rails est démarré, et dans tous les environnements, ce qui permet de vérifier que les environnements de test et de production sont correctement configurés.
Je ne crois pas qu'il soit possible de choisir entre plusieurs versions de rubygems dans une même installation de Ruby. Mais vous pouvez vous assurer que la version requise est utilisée. Placez ce qui suit à un endroit où il sera exécuté au début du démarrage de votre application, comme au début de votre Gemfile (qui est juste un fichier Ruby), ou au début d'un script qui n'utilise pas 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