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?
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.
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.
Si vous utilisez bundler, vous pouvez obtenir la version à partir de
bundle show [gemname]
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
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.
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.
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.
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)
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.
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
bundle show gemname Je pense que vous devez écrire comme
bundle show devise
et il imprimera la version actuelle de la gemme.
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|$)'