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?

È stato utile?

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 usare bundle 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'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top