web-dev-qa-db-fra.com

Comment savoir quelle version d'une gemme une application Rails utilise

J'examine une application Rails - le serveur de production a deux versions d'une gemme spécifique installée, comment puis-je savoir quelle version de l'application de production utilise?

111
Steve Brewer

Dans Rails 3 et Rails 4, utilisez bundle show

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

160
BJ Clark

Il m'a fallu plus de temps que prévu pour trouver et trier ces informations; j'ai donc voulu les afficher ici, dans un endroit que d'autres pourront visualiser. Je voulais aussi clarifier cela un peu 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 devriez utiliser bundle show

Par exemple, vous pouvez enregistrer toutes les versions de vos pierres précieuses 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 modifications.

37
SnapShot

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

bundle show [gemname]
37
Stina

Il existe probablement un moyen plus direct de le savoir, mais si vous chargez une console et exigez 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
5
gtd

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

Pour cette raison, je laisse Gemfile.lock en dehors de 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 qu'une gemme a été mise à jour avec les modifications les plus récentes.

5
SooDesuNe

Dans le terminal

bundle show [gem-name]
bundle show | grep [gem-name]

ou

gem list | grep [gem-name]

[nom-gemme] doit être remplacé comme nom de gemme que vous allez rechercher.

4
Danila Pavilov

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

Dans votre config/environment.rb, vous pouvez spécifier quelle version d'une gem particulière l'application doit utiliser. Toutefois, si plusieurs versions d'une gem sont installées sur votre ordinateur et que vous ne spécifiez pas la version, l'application utilisera la dernière version de cette gem.

4
Waseem
gem list <gemname>

Il montrera tous les joyaux correspondants, 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)
3
ImranNaqvi

script/about vous indiquera les versions des gems Rails et Rack que vous utilisez, mais rien d’autre. Idéalement, si vous regardez dans config/environment.rb, 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 aura inclus toutes les gemmes et versions requises. Cependant, les versions sont facultatives dans ce fichier et, en définitive, 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 list pour afficher toutes les versions de toutes les gemmes du système. Par défaut, il utilisera le dernier disponible.

2
John Hyland
bundle exec gem which gem_name

Est-ce 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
1
JAR.JAR.beans

bundle show gemname Je pense que vous devez écrire comme

bundle show devise

et il imprimera la version actuelle de la gemme.

0
Bilal A.Awan

essayez celui-ci pour un bijou local:

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

Si vous utilisez bundle:

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