Question

J'examine une application sur 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?

Était-ce utile?

La solution

Dans Rails 3 et 4, utilisez bundle show

.

Dans Rails 2, rake gems indiquera quels gemmes, dépendances et versions sont installés, gelés, etc.

Autres conseils

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

bundle show [gemname]

Comme il m'a fallu plus de temps que prévu pour trouver et trier ces informations, je souhaitais les afficher ici, dans un endroit que les autres pourront visualiser. Je voulais aussi clarifier cela un peu pour Rails 3:

Par exemple, vous pouvez enregistrer toutes les versions de vos gems dans un fichier pour les visualiser avec:

liste de gemmes > all_gems.txt

et vous pouvez voir les versions que votre application Rails utilise avec:

bundle show > project_gems.txt

À l'aide d'un éditeur tel que Vim, vous pouvez facilement utiliser vimdiff pour voir les modifications

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'

Cela vous indiquera 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 dans 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 des modifications importantes.

Dans le terminal

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

ou

gem list | grep [gem-name]

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

Essayez d’utiliser script / à propos de . Votre config / environment.rb contient également des informations à ce sujet.

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

gem list <gemname>

Il affichera toutes les gemmes correspondantes, par exemple, si quelqu'un le fait

gem list rack

Ensuite, le résultat sera le suivant

*** 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 principaux que vous utilisez, mais rien d’autre. Idéalement, si vous regardez dans config / environment.rb , il devrait y avoir une section ressemblant à 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 appliquer un require 'rubygems'; requièrent 'some_random_thing' en haut de tout fichier donné.

Si vous voyez qu'une gemme est requise, mais qu'aucune version n'est spécifiée, vous pouvez taper liste de gemmes pour afficher toutes les versions de toutes les gemmes du système. Par défaut, il utilisera la dernière version disponible.

bundle exec gem which gem_name

C’est probablement ce que vous pouvez utiliser:

<*>#8250; bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb

essayez celui-ci pour la gemme locale:

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

Si vous utilisez bundle:

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

bundle show gemname I.e pour la conception, vous devez écrire comme

bundle show devise

et la version actuelle de la gemme sera imprimée.

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

gem 'rails', '4.0.0.rc1'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top