Comment savoir quelle version d'un bijou une application de rails utilise


116

J'étudie une application rails - le serveur prod a deux versions d'un gem spécifique installé, comment puis-je savoir quelle version l'application prod utilise?


Vous demandez quelle version de rails, ou quelle version d'un autre bijou?
BJ Clark

1
Quelle version d'un bijou particulier.
Steve Brewer

J'ai un bijou gelé sous vendeurs / gemmes, puis une version plus récente du gemme est installée à l'emplacement par défaut des gemmes. Je regarde quelque chose de rails qui dit "J'ai chargé ce bijou à partir de cet endroit".
Steve Brewer

Réponses:


173

Dans Rails 3 et Rails 4, utilisez bundle show

Dans Rails 2, rake gemsaffichera les gemmes, dépendances et versions installées, gelées, etc.


2
Cela ne fonctionnera que si la gemme a été spécifiée dans le fichier environment.rb. Si le développeur en a juste besoin quelque part, les gemmes de râteau ne fonctionneront pas.
John Hyland

(Ou dans l'un des fichiers config / environnements / *, selon votre RAILS_ENV.)
John Hyland

2
Si vous voulez filtrer la liste, faites par bundle show | grep gem_nameexemple pour la boussole:bundle show | grep compass
Adam Waite

Alors qu'est-ce que cela signifie lorsque vous tapez bundle show et que vous obtenez un tas de gemmes avec des versions comprenant "rails 2.3.17) et que vous tapez des gemmes de râteau et vous obtenez ce qui ressemble à une légende (I = Installé, etc.) mais pas de gemmes / Est-ce que j'ai des rails version 2 ou pas? Peut-être ai-je des rails version 2 et un bundler plus avancé? Est-ce bon / mauvais? (Oui, je sais que c'est mauvais d'avoir une telle ancienne version de rails, je veux savoir si c'est catastrophique d'avoir des rails et un bundler aussi incompatibles (si c'est le cas).)
Brenda J. Butler

39

Si vous utilisez bundler, vous pouvez obtenir la version à partir de

bundle show [gemname]

Je suis venu à cette question parce que j'essaie de passer au bundler (probablement beaucoup de gens aussi, car Heroku l'exige maintenant)
GreenAsJade

Ceci est obsolète. Utilisez bundle info [gemname]plutôt.
collimarco

37

Il m'a fallu plus de temps que prévu pour trouver et trier ces informations, je voulais donc les publier ici à un endroit pour que d'autres puissent les voir. Je voulais également clarifier un peu cela pour Rails 3:

  • script / about a été remplacé par rake about Les détails sont ici . Si vous êtes intéressé, une liste de tous les changements de ligne de commande pour Rails 3 peut être trouvée ici .

  • rake gems ne fonctionne pas dans Rails 3. À la place, vous devez utiliser bundle show

À titre d'exemple, vous pouvez enregistrer toutes les versions de vos gemmes dans un fichier pour les visualiser avec:

gem list > all_gems.txt

et vous pouvez voir quelles versions votre application Rails utilise avec:

bundle show > project_gems.txt

En utilisant un éditeur comme Vim, vous pouvez facilement utiliser vimdiff pour voir les changements


6

Il existe probablement un moyen plus direct de le savoir, mais si vous chargez une console et avez besoin d'une version spécifique comme celle-ci:

gem 'RedCloth', '3.0.4'

Il vous dira quelle version est déjà activée:

=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2

6

Dans le terminal

  bundle show <gem-name>
  bundle show | grep <gem-name>

ou

  gem list | grep <gem-name>

Par exemple:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

Il existe également une liste dans Gemfile.lock, située dans le répertoire racine de votre application.

Pour cette raison, je laisse de Gemfile.lockcôté mon .gitignore. Cela m'a sauvé plus d'une fois lorsque j'ai oublié de spécifier la version de la gemme dans GemFile, et une gemme a été mise à jour avec des changements de rupture.


4

Essayez d'utiliser script/about. Votre a config/environment.rbégalement des informations à ce sujet.

Dans votre, config/environment.rbvous pouvez spécifier quelle version d'une gemapplication particulière doit utiliser. Cependant, si vous avez plusieurs versions d'un geminstallé sur votre machine et que vous ne spécifiez pas la version, la dernière version de ce joyau sera utilisée par l'application.


3
gem list <gemname>

Il montrera toutes les gemmes correspondantes, par exemple si quelqu'un le fait

gem list rack

Ensuite, la sortie sera comme suit

*** LOCAL GEMS ***

rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)

2

script/aboutvous dira quelles versions des gemmes de base Rails et Rack vous utilisez, mais rien d'autre. Idéalement, si vous regardez config/environment.rbdedans, il devrait y avoir une section qui ressemble à ceci:

# Specify gems that this application depends on and have them installed with rake gems:install
# config.gem "bj"
# config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
# config.gem "sqlite3-ruby", :lib => "sqlite3"
# config.gem "aws-s3", :lib => "aws/s3"

Avec un peu de chance, l'auteur de l'application y aura inclus toutes les gemmes et versions requises. Cependant, les versions sont facultatives dans ce fichier et, en fin de compte, rien n'empêche un développeur inexpérimenté de simplement frapper un require 'rubygems'; require 'some_random_thing'en haut d'un fichier donné.

Si vous voyez qu'une gemme est requise, mais qu'aucune version n'est spécifiée, vous pouvez taper gem listpour voir toutes les versions de toutes les gemmes sur le système. Par défaut, il utilisera le dernier disponible.


Votre script / about vous parle-t-il de gemmes? Le mien me dit simplement quelle version de ruby, rails et environnement j'utilise.
BJ Clark

Bon, Rails (et Rack) sont tous deux des gemmes, et script / about vous dira quelles versions d'entre eux sont en cours d'exécution, ainsi que les éléments de base de Rails (ActiveSupport, etc.) mais il ne vous parlera d'aucun autre bijou. Désolé si ce n'était pas clair.
John Hyland

1
bundle exec gem which gem_name

Est probablement ce que vous pouvez utiliser:

$ bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb

Je cherchais des informations sur la version d'une gemme installée dans le monde qui était exécutée dans un dossier arbitraire et cela m'a conduit à ce que je pense être la bonne solution -gem which gem_name
cori

1

bundle show gemname Ie pour la conception, vous devez écrire comme

bundle show devise

et il imprimera la version actuelle du gem.


0

essayez celui-ci pour un joyau local:

gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

Si vous utilisez un bundle:

bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

0

Dans la version plus récente, utilisé bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`

0

Si vous utilisez bundler, vous pouvez obtenir la version en utilisant:

bundle info [gemname]

-8

Dans Gemfile, il devrait y avoir la réponse:

gem 'rails', '4.0.0.rc1'

2
Gemfilene déclarera pas toujours explicitement un numéro de version.
Tass
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.