2009-07-11 19 views
6

Come puoi determinare quale rubygem viene utilizzato in risposta a una dichiarazione "require"? gemma che non sembra aiutare.Determinare quale rubygem stai utilizzando

Sfondo: per il progetto hornsby-herbarium-parser, sto usando la gemma roo.

Ho usato la gemma github hmcgowan-roo, poiché a quel tempo era più recente della versione rubyforge di roo. Ho provato a testare il codice su runcoderun e non è riuscito perché non ha alcuna versione di roo. A questo punto, erano disponibili nuove versioni di roo sia su github che su rubyforge.

Ho deciso che potrei anche vedere se l'ultima versione di rubyforge funziona per il mio codice, poiché presumo che rubyforge sia più ufficiale, autorevole e stabile delle forchette di github. Una volta che sono sicuro che la versione di rubyforge funziona con il mio codice, chiederò a Runcoderun se possono installarlo sul loro sistema.

I gemelli sudo installati roo, e le mie gemme ora includono "hmcgowan-roo (1.3.5)" e "roo (1.3.6)", e ancora eseguono i test per hornsby-herbarium-parser. So che come la versione di rubyforge è stata installata più di recente, è dovrebbe essere essere quella utilizzata nei test, ma voglio essere in grado di verificare questo.

gem which roo 

non ha aiutato, perché mi ha dato

(checking gem hmcgowan-roo-1.3.5 for roo) 
/usr/lib/ruby/gems/1.8/gems/hmcgowan-roo-1.3.5/lib/roo.rb 

che presumo sia la risposta sbagliata.

Aggiornamento: Ho utilizzato sia

$:.detect {|dir| dir =~ /roo/} 

e

puts Roo::VERSION::STRING 

entrambi sono d'accordo con la gemma che, dicendo che sto ancora utilizzando hmcgowan-roo-1.3.5.

+0

Vuoi dalla CLI, o dall'interno di Ruby, entrambi sono OK è così? –

+0

Simile ma per Rails (quindi suppone Bundler): http://stackoverflow.com/questions/1621405/how-to-tell-which-version-of-a-gem-a-rails-app-is-using –

risposta

3

Prima di tutto, RubyGems caricherà il più alto numero di versione gioiello, non il più recente installato. Quindi dovresti avere roo 1.3.6 qui.

Oltre a ciò, ho il secondo suggerimento di gerrit di cercare una costante di versione. Ad esempio, ho appena caricato rmagick e c'è una costante Magick :: Version. Un altro esempio è Open4 :: VERSION.

Tuttavia, non tutte le gemme hanno una versione costante, così come ripiego si potrebbe fare qualcosa di simile hacky:

>> require 'open4' 
=> true 

>> $:.detect {|dir| dir =~ /\/open4-([^\/]*)\//} 
=> "/Library/Ruby/Gems/1.8/gems/open4-0.9.6/bin" 

>> $1 
=> "0.9.6" 
+1

I non pensavo a $:, grazie. Tuttavia, con l'espressione regolare, se qualcuno ha creato johndoe-open4, non corrisponderebbe. –

+0

Vero, vero. Questo è il motivo per cui l'ho chiamato 'hacky' :) Ma forse potresti sistemarlo un po 'di più. –

-1

Il modo più semplice sarà disinstallare e quindi reinstallare i rubygems singolarmente. Non sono così sicuro che la tua ipotesi riguardo a Github che non ha fonti stabili sia così accurata.

5

mette Roo::VERSION::STRING

1

lista gemma xxx il valore predefinito per caricare la versione più recente.

1

si può fare uso Gem::VERSION

require 'rubygems'; puts Gem::VERSION 

che in un programma di rubino, che è piuttosto utile se si vuole fare in modo che l'applicazione nell'ambito della stessa versione di rubygems accrossing tutte le macchine (ad es bundler Gemfile)

Problemi correlati