2009-07-11 10 views
6

¿Cómo puede determinar qué rubygem se está utilizando en respuesta a una declaración "require"? gema que no parece ayudar.Determinar qué rubygem está usando

Antecedentes: para el proyecto hornsby-herbarium-parser, estoy usando el gema roo.

Utilicé la gema github hmcgowan-roo, ya que en ese momento era más reciente que la versión rubyforge de roo. Intenté probar el código en runcoderun, y falló porque no tiene ninguna versión de roo. En este momento, las nuevas versiones de roo estaban disponibles tanto en github como en rubyforge.

Decidí que puedo ver si la última versión de rubyforge funciona para mi código, ya que supongo que rubyforge es más oficial, autoritario y estable que las github forks. Una vez que estoy seguro de que la versión de rubyforge funciona con mi código, le preguntaré a runcoderun muy bien si pueden instalarlo en su sistema.

Sudo gem instaló roo, y mis gemas ahora incluyen "hmcgowan-roo (1.3.5)" y "roo (1.3.6)", y todavía se ejecutan las pruebas de hornsby-herbarium-parser. Sé que como la versión de rubyforge se instaló más recientemente, debe ser para ser el que se utiliza en las pruebas, pero quiero poder verificar esto.

gem which roo 

no ayudó, porque me dio

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

que supongo es la respuesta equivocada.

actualización: he usado tanto

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

y

puts Roo::VERSION::STRING 

ambos están de acuerdo con la gema, que, diciendo que todavía estoy usando hmcgowan-roo-1.3.5.

+0

¿Quieres CLI, o desde dentro de Ruby, ambos están bien es eso? –

+0

Similar pero para Rails (esto supone Bundler): http://stackoverflow.com/questions/1621405/how-to-tell-which-version-of-a-gem-a-rails-app-isusing –

Respuesta

3

En primer lugar, rubygems se carga la más alta joya número de versión, no la más reciente instalación. Entonces deberías obtener roo 1.3.6 aquí.

Aparte de eso, solicité la sugerencia de Gerrit de buscar una versión constante. Por ejemplo, acabo de cargar rmagick y hay una Magick :: Version constante. Otro ejemplo es Open4 :: VERSION.

Sin embargo, no todas las gemas tienen una versión constante, por lo que como punto de retorno se podría hacer algo como 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 No pensé en $:, gracias. Sin embargo, con la expresión regular, si alguien creó johndoe-open4, entonces no coincidiría. –

+0

cierto, cierto. Es por eso que lo llamé 'hacky' :) Pero tal vez podrías arreglarlo un poco más. –

-1

La manera más simple será desinstalar y luego reinstalar los rubygems individualmente. No estoy tan seguro de que su suposición de que github no tenga fuentes estables sea tan preciso.

5

pone Roo::VERSION::STRING

1

lista joya xxx por defecto para cargar la versión más reciente.

1

que puede hacer uso Gem::VERSION

require 'rubygems'; puts Gem::VERSION 

que en un programa de rubí, que es bastante útil si usted quiere asegurarse de que su aplicación bajo misma versión de rubygems accrossing todas las máquinas (por ejemplo bundler Gemfile)

Cuestiones relacionadas