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 gemsaffichera les gemmes, dépendances et versions installées, gelées, etc.
bundle show | grep gem_nameexemple 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.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.
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.
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/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.
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]