Pregunta

Estoy investigando una aplicación Rails. El servidor prod tiene dos versiones de una gema específica instalada. ¿Cómo puedo saber qué versión está usando la aplicación prod?

¿Fue útil?

Solución

En Rails 3 y Rails 4, use bundle show

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

Otros consejos

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

bundle show [gemname]

Me tomó más tiempo del esperado encontrar y ordenar esta información, así que quise publicarla aquí en un lugar para que otros la vean. También quería aclarar esto un poco para Rails 3:

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

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

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

lista de gemas > all_gems.txt

y puede ver qué versiones está usando su aplicación Rails con:

bundle show > project_gems.txt

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

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

gem 'RedCloth', '3.0.4'

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

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

También hay una lista en Gemfile.lock , ubicada 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 la gema en GemFile , y una gema se actualizó con los cambios de última hora.

En la terminal

bundle show [gem-name]
bundle show | grep [gem-name]

o

gem list | grep [gem-name]

[nombre de la gema] debe reemplazarse como el nombre de gema que vas a buscar.

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

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

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)

script / about le dirá qué versiones de las gemas principales de Rails y Rack está utilizando, pero no otra cosa. Lo ideal es que si miras en 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 un poco de suerte, el autor de la aplicación habrá incluido todas las gemas y versiones requeridas allí. Sin embargo, las versiones son opcionales en este archivo y, en última instancia, nada impide que un desarrollador sin experiencia solo golpee a un requiere "rubygems"; requiere 'some_random_thing' en la parte superior de cualquier archivo dado.

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

bundle exec gem which gem_name

Es probablemente lo que puedes usar:

<*>#8250; bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb

prueba este para una gema local:

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

Si usas bundle:

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

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

bundle show devise

y se imprimirá la versión actual de la gema.

En Gemfile, debería haber la respuesta:

gem 'rails', '4.0.0.rc1'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top