Come sapere quale versione di una gemma sta usando un'app Rails
-
06-07-2019 - |
Domanda
Sto studiando un'app di rotaie: sul server prod sono installate due versioni di una gemma specifica, come posso sapere quale versione sta usando l'app prod?
Soluzione
In Rails 3 e Rails 4, usa bundle show
In Rails 2, rake gems
stamperà quali gemme, dipendenze e versioni sono installate, congelate, ecc.
Altri suggerimenti
Se si utilizza il bundler, è possibile ottenere la versione da
bundle show [gemname]
Mi ci è voluto più tempo del previsto per trovare e ordinare queste informazioni, quindi volevo pubblicarle qui in un posto per farle vedere agli altri. Volevo anche chiarire un po 'questo per Rails 3:
-
script / about è stato sostituito con
rake about
I dettagli sono qui . Se sei interessato a un elenco di tutte le modifiche alla riga di comando per Rails 3, puoi trovarle qui . rake gems
non funziona in Rails 3. Invece dovresti usarebundle show
Ad esempio, puoi salvare tutte le versioni delle tue gemme in un file per la visualizzazione con:
gemma list > all_gems.txt
e puoi vedere con quali versioni la tua app Rails sta utilizzando:
bundle show > project_gems.txt
Usando un editor come Vim puoi facilmente usare vimdiff per vedere le modifiche
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
C'è anche un elenco in Gemfile.lock
, situato nella directory principale della tua app.
Per questo motivo lascio Gemfile.lock
dal mio .gitignore
. Questo mi ha salvato più di una volta quando ho dimenticato di specificare la versione gemma in GemFile
e una gemma è stata aggiornata con modifiche non recenti.
Nel terminale
bundle show [gem-name]
bundle show | grep [gem-name]
o
gem list | grep [gem-name]
[gem-name] dovrebbe essere sostituito come gem name che stai cercando.
Prova a usare script / about
. Il tuo config / environment.rb
contiene anche informazioni al riguardo.
Nel tuo config / environment.rb
puoi specificare quale versione di un particolare gem
deve essere utilizzata dall'applicazione. Tuttavia, se hai più versioni di un gem
installato sul tuo computer e non specifichi la versione, l'applicazione verrà utilizzata dall'ultima versione di quel gem.
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)
script / about
ti dirà quali versioni delle gemme Rails e Rack di base stai utilizzando, ma non altro. Idealmente, se guardi in 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 schiaffeggiare un che richiede 'rubygems'; richiede "some_random_thing"
nella parte superiore di un determinato file.
Se vedi che è richiesta una gemma, ma non è stata specificata alcuna versione, puoi digitare gem list
per vedere tutte le versioni di tutte le gemme sul sistema. Per impostazione predefinita, utilizzerà l'ultimo disponibile.
bundle exec gem which gem_name
È probabilmente quello che puoi usare:
<*>#8250; bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb
prova questo per gemma locale:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Se si utilizza il bundle:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
bundle mostra gemname Ad esempio, per ideare devi scrivere come
bundle show devise
e stamperà la versione gemma corrente.
In Gemfile, dovrebbe esserci la risposta:
gem 'rails', '4.0.0.rc1'