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?

Steve Brewer
la source
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.

BJ Clark
la source
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]
Stina
la source
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

Instantané
la source
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
gtd
la source
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
Xing
la source
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.

SooDesuNe
la source
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.

Waseem
la source
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)
ImranNaqvi
la source
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.

John Hyland
la source
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
JAR.JAR.beans
la source
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.

Bilal A.Awan
la source
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|$)'
Sunil shakya
la source
0

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

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`
aldrien.h
la source
0

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

bundle info [gemname]
collimarco
la source
-8

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

gem 'rails', '4.0.0.rc1'
gprasant
la source
2
Gemfilene déclarera pas toujours explicitement un numéro de version.
Tass