1
votes

Comment vérifier les versions Ruby compatibles pour un bijou

Comment puis-je savoir si une gemme particulière est compatible ou non avec une certaine version de Ruby?

Je souhaite mettre à niveau la version Ruby d'une application sur laquelle je travaille, mais je n'ai pas vu de moyen authentique de le savoir quelle version de Ruby est prise en charge par un gem en particulier.

J'ai trouvé le * .gemspec du gem, qui contient souvent une configuration disant config.required_ruby_version ... , mais j'ai remarqué que toutes les gemmes ne contiennent pas de fichier gemspec. J'ai remarqué que j'ai quelques gemmes sur mon système, ActiveRecord par exemple, qui n'ont pas de Gemfile, alors que sur GitHub, nous avons un fichier gemspec disponible.

Ceci est la sortie de ls -lrth depuis ma machine locale:

Einstiens-MacBook-Pro:activerecord-4.2.7.1 superhero$ ls -lrth
total 128
-rw-r--r--  1 superhero  jingle    51K Dec 23 00:07 CHANGELOG.md
-rw-r--r--  1 superhero  jingle   1.0K Dec 23 00:07 MIT-LICENSE
-rw-r--r--  1 superhero  jingle   6.6K Dec 23 00:07 README.rdoc
drwxr-xr-x  4 superhero  jingle   128B Dec 23 00:07 examples
drwxr-xr-x  5 superhero  jingle   160B Dec 23 00:07 lib

Le Le référentiel ActiveRecord a un fichier gemspec : entrez la description de l'image ici


0 commentaires

3 Réponses :


0
votes

Je suggère de consulter la page RubyGems du gem. Dans la colonne de gauche, vous trouverez la version Ruby requise. Pour ActiveRecord, vous aurez besoin d'au moins Ruby > = 1.9.3 .

Mais gardez à l'esprit que cela ne vous indique que le numéro de version minimum. Parce qu'au moment où une version particulière a été publiée, le développeur n'était pas en mesure de dire si une certaine version future de Ruby pourrait introduire des changements de rupture.

Pour les versions maximum prises en charge, vous devrez étudier les notes de publication ou les problèmes. Dans votre exemple, vous trouverez un article " Cette semaine dans Rails: Ruby 2.4 sur Rails 4.2 " que Rails 4.2.8 a ajouté le support de Ruby 2.4. Par conséquent, je suppose que Rails 4.2.7 ne supporte que Ruby 2.3.


1 commentaires

Cela résonne ma réflexion sur le défi de la mise à niveau, je pense plutôt que la couverture de test est le moyen sûr de le faire ...



0
votes

J'ai trouvé quelque chose de plus intéressant sur Rubygems.org, qui sert d'API qui rend une réponse JSON / XML sur la gemme.

Souvent, il est mentionné dans Rubygems.org mais pas dans le fichier gemspec concernant la compatibilité de la version Ruby.

Il s'agit d'une manière unique de le récupérer: p>

{
  "name": "activerecord",
  "downloads": 163190934,
  "version": "4.2.7.1",
  "version_downloads": 6061660,
  "platform": "ruby",
  "authors": "David Heinemeier Hansson",
  "info": "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.",
  "licenses": [
    "MIT"
  ],
  "metadata": {},
  "sha": "923a64e2ebb9c4529761bf65ed37601a7000af2f3b18f12ea00e9f9ba2a168d2",
  "project_uri": "https://rubygems.org/gems/activerecord",
  "gem_uri": "https://rubygems.org/gems/activerecord-4.2.7.1.gem",
  "homepage_uri": "http://rubyonrails.org",
  "wiki_uri": null,
  "documentation_uri": "http://www.rubydoc.info/gems/activerecord/4.2.7.1",
  "mailing_list_uri": null,
  "source_code_uri": null,
  "bug_tracker_uri": null,
  "changelog_uri": null,
  "dependencies": {
    "development": [],
    "runtime": [
      {
        "name": "activemodel",
        "requirements": "= 4.2.7.1"
      },
      {
        "name": "activesupport",
        "requirements": "= 4.2.7.1"
      },
      {
        "name": "arel",
        "requirements": "~> 6.0"
      }
    ]
  },
  "built_at": "2016-08-10T00:00:00.000Z",
  "created_at": "2016-08-11T17:33:45.486Z",
  "description": "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.",
  "downloads_count": 6061660,
  "number": "4.2.7.1",
  "summary": "Object-relational mapper framework (part of Rails).",
  "rubygems_version": ">= 0",
  "ruby_version": ">= 1.9.3",
  "prerelease": false,
  "requirements": []
}
curl https://rubygems.org/api/v2/rubygems/activerecord/versions/4.2.7.1.json

Et extrayez ruby_version .

Consultez la documentation sur l'API pour plus d'informations.


0 commentaires

2
votes

Chercher le fichier gemspec et vérifier RubyGems.org est un bon moyen de vérifier Compatibilité Ruby, mais comme mentionné ci-dessus, il serait inutile si un auteur de gemmes n'écrivait pas un fichier gemspec . un script de test serait une solution. Si Ruby version 2.4.1 et 2.5.1 ont été installés sur votre machine locale, écrivez un script similaire à " Test avec plusieurs versions de Ruby et Gem " comme:

#!/usr/bin/env bash

set -e

rubies=("ruby-2.4.1" "ruby-2.5.3")
for i in "${rubies[@]}"
do
  echo "====================================================="
  echo "$i: Start Test"
  echo "====================================================="
  rvm $i exec bundle
  rvm $i exec bundle exec rake test
  echo "====================================================="
  echo "$i: End Test"
  echo "====================================================="
done

RVM sélectionnera une version Ruby et exécutera le test pour la version Ruby sélectionnée.

Si un gem n'a pas de tests unitaires, ce script de test sera également inutile. Mais une gemme qui n'a aucun test unitaire ne vaut pas la peine d'être utilisée.

Bien que cette solution ne soit pas non plus un moyen authentique de vérifier une version Ruby compatible, elle en vaut la peine pour vos tests.


0 commentaires