Come sapere quale versione di una gemma sta utilizzando un'app di rails


116

Sto indagando su un'app rails: il server prod ha due versioni di una gem specifica installata, come posso sapere quale versione sta utilizzando l'app prod?


Stai chiedendo quale versione di rails o quale versione di qualche altra gemma?
BJ Clark,

1
Quale versione di un particolare gioiello.
Steve Brewer,

Ho una gemma congelata sotto venditori / gemme, quindi ho una versione più recente della gemma installata nella posizione predefinita delle gemme. Sto guardando da qualcosa su rotaie che dice "Ho caricato questo gioiello da questa posizione".
Steve Brewer

Risposte:


173

In Rails 3 e Rails 4, utilizzare bundle show

In Rails 2, rake gemsstamperà quali gem, dipendenze e versioni sono installate, congelate, ecc.


2
Funzionerà solo se la gemma è stata specificata nel file environment.rb. Se lo sviluppatore lo richiedeva da qualche parte, le gemme rake non funzioneranno.
John Hyland,

(O in uno dei file di configurazione / ambienti / *, a seconda di RAILS_ENV.)
John Hyland,

2
Se vuoi filtrare l'elenco fai bundle show | grep gem_name, ad esempio per la bussola:bundle show | grep compass
Adam Waite

Quindi cosa significa quando digiti bundle show e ottieni un mucchio di gemme con versioni che includono "rails 2.3.17) e digiti rake gems e ottieni quella che sembra una leggenda (I = Installed, ecc.) Ma nessuna gemma / versioni? Ho rails versione 2 o no? Forse ho rails versione 2 e un bundler più avanzato? È buono / cattivo? (Sì, lo so che è brutto avere una versione così vecchia di rails, voglio sapere se è catastrofico avere binari e bundler così non corrispondenti (se lo sono).
Brenda J. Butler

39

Se usi il bundler, puoi ottenere la versione da

bundle show [gemname]

Sono arrivato a questa domanda perché sto cercando di passare al bundler (probabilmente anche molte persone, perché Heroku ora lo richiede)
GreenAsJade

Questo è deprecato. Usa bundle info [gemname]invece.
collimarco

37

Mi ci è voluto più tempo del previsto per trovare e ordinare queste informazioni, quindi ho voluto pubblicarle qui in un posto affinché gli altri potessero vederle. Volevo anche chiarire un po 'questo per Rails 3:

  • script / about è stato sostituito con rake about I dettagli sono qui . Se sei interessato, un elenco di tutte le modifiche della riga di comando per Rails 3 può essere trovato qui .

  • rake gems non funziona in Rails 3. Invece dovresti usare bundle show

Ad esempio, puoi salvare tutte le versioni delle tue gemme in un file per la visualizzazione con:

gem list > all_gems.txt

e puoi vedere quali versioni utilizza la tua app Rails con:

bundle show > project_gems.txt

Usando un editor come Vim puoi facilmente usare vimdiff per vedere le modifiche


6

Probabilmente esiste un modo più diretto per scoprirlo, ma se carichi una console e richiedi una versione specifica in questo modo:

gem 'RedCloth', '3.0.4'

Ti dirà quale versione è già attivata:

=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2

6

Nel terminal

  bundle show <gem-name>
  bundle show | grep <gem-name>

o

  gem list | grep <gem-name>

Per esempio:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

C'è anche un elenco in Gemfile.lock, situato nella directory principale della tua app.

Per questo motivo lascio Gemfile.lockfuori il mio .gitignore. Questo mi ha salvato più di una volta quando ho dimenticato di specificare la versione della gemma in GemFilee una gemma è stata aggiornata con modifiche di rilievo.


4

Prova a usare script/about. Il tuo config/environment.rbha anche informazioni su di esso.

Nel tuo config/environment.rbpuoi specificare quale versione di una particolare gemapplicazione dovrebbe usare. Tuttavia, se hai più versioni di un geminstallato sulla tua macchina e non specifichi la versione, l'ultima versione di quella gemma verrà utilizzata dall'applicazione.


3
gem list <gemname>

Mostrerà tutte le gemme corrispondenti, ad esempio se qualcuno lo fa

gem list rack

Quindi l'output sarà il seguente

*** LOCAL GEMS ***

rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)

2

script/aboutti dirà quali versioni delle gemme principali di Rails e Rack stai usando, ma non nient'altro. Idealmente, se guardi dentro config/environment.rb, dovrebbe esserci una sezione simile a questa:

# 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"

Con un po 'di fortuna, l'autore dell'app avrà incluso tutte le gemme e le versioni richieste. Tuttavia, le versioni sono opzionali in questo file e alla fine nulla impedisce a uno sviluppatore inesperto di semplicemente schiaffeggiare un require 'rubygems'; require 'some_random_thing'all'inizio di un dato file.

Se vedi che è richiesta una gemma, ma non è specificata alcuna versione, puoi digitare gem listper vedere tutte le versioni di tutte le gemme sul sistema. Per impostazione predefinita, utilizzerà l'ultimo disponibile.


Il tuo script / about ti parla di gemme? Il mio mi dice solo quale versione di ruby, rails e ambiente sto usando.
BJ Clark

Esatto, Rails (e Rack) sono entrambi gemme, e script / about ti dirà quali versioni sono in esecuzione, insieme alle cose principali di Rails (ActiveSupport, ecc.) Ma non ti dirà di nessun altro gioiello. Scusa se non è stato chiaro.
John Hyland,

1
bundle exec gem which gem_name

Probabilmente è quello che puoi usare:

$ bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb

Stavo cercando informazioni su quale versione di una gemma installata a livello globale fosse stata eseguita in una cartella arbitraria e questo mi ha portato a quella che credo sia la soluzione corretta -gem which gem_name
cori

1

bundle show gemname Ie per devise devi scrivere come

bundle show devise

e stamperà la versione gemma corrente.


0

prova questo per gemma locale:

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

Se usi bundle:

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

0

Nella versione più recente, usato bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`

0

Se usi il bundler, puoi ottenere la versione usando:

bundle info [gemname]

-8

In Gemfile, dovrebbe esserci la risposta:

gem 'rails', '4.0.0.rc1'

2
Gemfilenon dichiara sempre esplicitamente un numero di versione.
Tass
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.