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?
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?
Respuestas:
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.
bundle show | grep gem_name
, haga un ejemplo de brújula:bundle show | grep compass
Si usa bundler, puede obtener la versión de
bundle show [gemname]
bundle info [gemname]
lugar.
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
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
Intente usar script/about
. Tu config/environment.rb
también tiene información al respecto.
En su config/environment.rb
, puede especificar qué versión de una gem
aplicación en particular debe usar. Sin embargo, si tiene varias versiones de un gem
instalado 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 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 list
para ver todas las versiones de todas las gemas en el sistema. De forma predeterminada, utilizará el último disponible.
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
gem which gem_name
paquete show gemname Es decir, para diseñar tienes que escribir como
bundle show devise
e imprimirá la versión actual de la gema.
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|$)'
Si usa bundler, puede obtener la versión usando:
bundle info [gemname]