2009-10-25 52 views
103

Estoy investigando una aplicación de raíles: el servidor prod tiene instaladas dos versiones de una gema específica, ¿cómo puedo saber qué versión está utilizando la aplicación prod?Cómo saber qué versión de una aplicación gem a rails está usando

+0

¿Estás preguntando qué versión de los carriles, o la versión de alguna otra joya? –

+1

Qué versión de una gema en particular. –

+0

Tengo una gema congelada en proveedores/gemas, y luego tengo una versión más nueva de la gema instalada en la ubicación de gemas predeterminada. Estoy buscando algo de los rieles que dice "Cargué esta joya desde esta ubicación". –

Respuesta

148

En los carriles 3 y 4 carriles, use bundle show

En Rails 2, rake gems imprimirá lo gemas, dependencias y versiones están instalados, congelados, etc.

+2

Esto solo funcionará si la gema se ha especificado en el archivo environment.rb. Si el desarrollador lo requirió en alguna parte, las gemas de rake no funcionarán. –

+0

(O en uno de los archivos config/environments/*, dependiendo de su RAILS_ENV.) –

+2

Si desea filtrar la lista, haga 'bundle show | grep gem_name', ejemplo para brújula: 'show bundle | grep compass' –

4

Intente utilizar script/about. Su config/environment.rb también tiene información al respecto.

En su config/environment.rb puede especificar qué versión de un particular gem debe usar la aplicación. Sin embargo, si tiene múltiples versiones de un gem instaladas en su máquina y no especifica la versión, la aplicación usará la última versión de esa gema.

5

Probablemente es una forma más directa de averiguar esto, pero si se carga hasta una consola y necesita una versión específica de este modo:

gem 'RedCloth', '3.0.4' 

Se le dirá qué versión ya está activado:

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

script/about le dirá qué versiones de los carriles centrales y joyas de rack que está utilizando, pero no cualquier otra cosa. Lo ideal sería que, si nos fijamos en config/environment.rb, debe haber una sección que se parece a esto:

# 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 poco de suerte, el autor de la aplicación se ha incluido ninguna gemas y versiones requeridas allí. Sin embargo, las versiones son opcionales en este archivo y, en última instancia, nada impide que un desarrollador inexperto simplemente abofetee un require 'rubygems'; require 'some_random_thing' en la parte superior de un archivo determinado.

Si ve que se necesita una gema, pero no se especifica ninguna versión, puede escribir gem list para ver todas las versiones de todas las gemas en el sistema. Por defecto, usará el último disponible.

+0

¿Su secuencia de comandos/le informa acerca de las gemas? El mío solo me dice qué versión de ruby, rails y entorno estoy usando. –

+0

rails es una gema ... –

+0

Right, Rails (y Rack) son dos gemas, y script/about le dirá qué versiones de ellos se están ejecutando, junto con las cosas principales de Rails (ActiveSupport, etc.) pero no lo hará te cuento sobre otras gemas. Lo siento si eso no estaba claro. –

33

Si utiliza bundler, entonces puede obtener la versión de

bundle show [gemname] 
+0

Llegué a esta pregunta porque estoy tratando de mover _to_ bundler (probablemente muchas personas también, porque Heroku ahora lo requiere) – GreenAsJade

36

me tomó más tiempo de lo esperado para encontrar y ordenar a través de esta información, así que quería publicar aquí en un solo lugar para que otros vean. También quería aclarar esto un poco para Rails 3:

  • script/sobre ha sido sustituido por rake about Los detalles son here. Si le interesa una lista de todos los cambios en la línea de comandos de Rails 3, puede encontrarlos en here.

  • rake gems no funciona en Rails 3.En su lugar debe usar bundle show

A modo de ejemplo, puede guardar todas las versiones de sus joyas en un archivo para su visualización con:

gem list > all_gems.txt

y se puede ver lo que las versiones de su aplicación Rails es utilizando con:

bundle show > project_gems.txt

utilizando un editor como Vim puede utilizar simplemente vimdiff a sE e los cambios

5

También hay una lista en Gemfile.lock, que se encuentra en el directorio raíz de su aplicación.

Por esta razón dejo Gemfile.lock fuera de mi .gitignore. Esto me ha salvado más de una vez cuando olvidé especificar la versión de gema en GemFile, y una gema se actualizó con cambios de última hora.

-8

En Gemfile, no debería ser la respuesta:

gem 'rails', '4.0.0.rc1' 
+2

'Gemfile' no siempre declarará explícitamente un número de versión. – Tass

1
bundle exec gem which gem_name 

es probablemente lo que usted puede utilizar:

$› bundle exec gem which rails 
/Users/xxxx/.rvm/gems/[email protected]/gems/railties-4.1.7/lib/rails.rb 
+0

Estaba buscando información sobre qué versión de una gema instalada a nivel mundial se estaba ejecutando en una carpeta arbitraria y esto me llevó a lo que creo que es la solución correcta: 'gem which gem_name' – cori

6

En la terminal

gem list | grep xxx 

o

bundle show | grep xxx 

xxx debe ser reemplazado como el nombre de la gema que se va a buscar

3
gem list <gemname> 

Se mostrará todas las gemas coincidentes, por ejemplo si alguien hacer

gem list rack 

Entonces ª salida será de la siguiente manera

*** LOCAL GEMS *** 

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

prueba este para gema local:

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

Si utiliza paquete:

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