Cómo saber qué versión de una gema está usando una aplicación de rieles

116

Estoy investigando una aplicación de rieles: el servidor de prod tiene dos versiones de una gema específica instalada, ¿cómo puedo saber qué versión está usando la aplicación de prod?

Steve Brewer
fuente
¿Estás preguntando qué versión de rieles o qué versión de alguna otra joya?
BJ Clark
1
Qué versión de una joya en particular.
Steve Brewer
Tengo una gema congelada en vendedores / gemas, y luego tengo una versión más nueva de la gema instalada en la ubicación predeterminada de las gemas. Estoy mirando algo de los rieles que dice "Cargué esta joya desde esta ubicación".
Steve Brewer

Respuestas:

172

En Rails 3 y Rails 4, use bundle show

En Rails 2, rake gemsimprimirá qué gemas, dependencias y versiones están instaladas, congeladas, etc.

BJ Clark
fuente
2
Esto solo funcionará si la gema se ha especificado en el archivo environment.rb. Si el desarrollador solo lo requirió en alguna parte, las gemas de rastrillo no funcionarán.
John Hyland
(O en uno de los archivos config / environment / *, dependiendo de su RAILS_ENV.)
John Hyland
2
Si desea filtrar la lista bundle show | grep gem_name, haga un ejemplo de brújula:bundle show | grep compass
Adam Waite
Entonces, ¿qué significa cuando escribes bundle show y obtienes un montón de Gems con versiones que incluyen "rails 2.3.17) y escribes rake gems y obtienes lo que parece una leyenda (I = Instalado, etc.) pero no gemas / ¿Tengo rieles versión 2 o no? ¿Quizás tengo rieles versión 2 y un paquete más avanzado? ¿Esto es bueno / malo? (Sí, sé que es malo tener una versión tan antigua de rieles, quiero saber si es catastrófico tener rieles y empaquetadores tan desiguales (si lo es).
Brenda J. Butler
39

Si usa bundler, puede obtener la versión de

bundle show [gemname]
Stina
fuente
Llegué a esta pregunta porque estoy tratando de pasar al paquete (probablemente muchas personas también, porque Heroku ahora requiere esto)
GreenAsJade
Esto está desaprobado. Úselo en su bundle info [gemname]lugar.
collimarco
37

Me tomó más de lo esperado encontrar y clasificar esta información, así que quería publicarla aquí en un lugar para que otros la vieran. También quería aclarar un poco esto para Rails 3:

  • script / about ha sido reemplazado por rake about Los detalles están aquí . Si está interesado, puede encontrar una lista de todos los cambios en la línea de comandos para Rails 3 aquí .

  • rake gems no funciona en Rails 3. En su lugar, debería utilizar bundle show

Como ejemplo, puede guardar todas las versiones de sus gemas en un archivo para verlas con:

gem list > all_gems.txt

y puede ver qué versiones usa su aplicación Rails con:

bundle show > project_gems.txt

Usando un editor como Vim, puede usar vimdiff fácilmente para ver los cambios

Instantánea
fuente
6

Probablemente haya una forma más directa de averiguarlo, pero si carga una consola y requiere una versión específica como esta:

gem 'RedCloth', '3.0.4'

Te dirá qué versión ya está activada:

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

En la terminal

  bundle show <gem-name>
  bundle show | grep <gem-name>

o

  gem list | grep <gem-name>

Por ejemplo:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails
Xing
fuente
5

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

Por eso dejo Gemfile.lockfuera de mi .gitignore. Esto me ha salvado más de una vez cuando olvidé especificar la versión de la gema GemFiley una gema se actualizó con cambios importantes.

SooDesuNe
fuente
4

Intente usar script/about. Tu config/environment.rbtambién tiene información al respecto.

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

Waseem
fuente
3
gem list <gemname>

Mostrará todas las gemas coincidentes, por ejemplo, si alguien lo hace

gem list rack

Entonces la salida será la siguiente

*** LOCAL GEMS ***

rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
ImranNaqvi
fuente
2

script/aboutle dirá qué versiones de las gemas principales de Rails y Rack está utilizando, pero nada más. Idealmente, si miras hacia adentro config/environment.rb, debería haber una sección que se vea así:

# 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 suerte, el autor de la aplicación habrá incluido allí todas las gemas y versiones necesarias. Sin embargo, las versiones son opcionales en este archivo y, en última instancia, nada impide que un desarrollador sin experiencia simplemente coloque un require 'rubygems'; require 'some_random_thing'en la parte superior de cualquier archivo.

Si ve que se requiere una gema, pero no se especifica una versión, puede escribir gem listpara ver todas las versiones de todas las gemas en el sistema. De forma predeterminada, utilizará el último disponible.

John Hyland
fuente
¿Tu guión te habla de gemas? El mío solo me dice qué versión de ruby, rieles y entorno estoy usando.
BJ Clark
Correcto, Rails (y Rack) son gemas, y script / about te dirá qué versiones de ellos se están ejecutando, junto con el material principal de Rails (ActiveSupport, etc.) pero no te informará sobre otras gemas. Lo siento si eso no estaba claro.
John Hyland
1
bundle exec gem which gem_name

Probablemente sea lo que puedas usar:

$ bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb
JAR.JAR.beans
fuente
Estaba buscando información sobre qué versión de una gema instalada globalmente 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
1

paquete show gemname Es decir, para diseñar tienes que escribir como

bundle show devise

e imprimirá la versión actual de la gema.

Bilal A.Awan
fuente
0

prueba este para gema local:

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

Si usa paquete:

bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Sunil shakya
fuente
0

En la versión más reciente, usado bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`
aldrien.h
fuente
0

Si usa bundler, puede obtener la versión usando:

bundle info [gemname]
collimarco
fuente
-8

En Gemfile, debería haber la respuesta:

gem 'rails', '4.0.0.rc1'
gprasant
fuente
2
Gemfileno siempre declarará explícitamente un número de versión.
Tass