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?
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?
Réponses:
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.
bundle show | grep gem_name
exemple pour la boussole:bundle show | grep compass
Si vous utilisez bundler, vous pouvez obtenir la version à partir de
bundle show [gemname]
bundle info [gemname]
plutôt.
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
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
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.lock
cô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.
Essayez d'utiliser script/about
. Votre a config/environment.rb
également des informations à ce sujet.
Dans votre, config/environment.rb
vous pouvez spécifier quelle version d'une gem
application particulière doit utiliser. Cependant, si vous avez plusieurs versions d'un gem
installé 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.
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)
script/about
vous dira quelles versions des gemmes de base Rails et Rack vous utilisez, mais rien d'autre. Idéalement, si vous regardez config/environment.rb
dedans, 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 list
pour voir toutes les versions de toutes les gemmes sur le système. Par défaut, il utilisera le dernier disponible.
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
gem which gem_name
bundle show gemname Ie pour la conception, vous devez écrire comme
bundle show devise
et il imprimera la version actuelle du gem.
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|$)'
Si vous utilisez bundler, vous pouvez obtenir la version en utilisant:
bundle info [gemname]