Cómo saber qué versión de una gema está usando una aplicación rails
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?
12 answers
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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-04 16:09:45
Me llevó más tiempo de lo esperado encontrar y ordenar esta información, así que quería publicarla aquí en un lugar para que otros la vieran. También quería aclarar esto un poco para Rails 3:
Script / about ha sido reemplazado por
rake about
Los detalles son 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, debe usarbundle show
Como ejemplo, puede guardar todas las versiones de sus gemas en un archivo para verlas con:
gem list > all_gems.txt
Y puedes ver con qué versiones está usando tu aplicación Rails:
bundle show > project_gems.txt
Usando un editor como Vim puedes usar fácilmente vimdiff para ver los cambios
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-29 15:19:20
Si usa bundler, entonces puede obtener la versión de
bundle show [gemname]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-18 20:39:16
En el terminal
gem list | grep xxx
O
bundle show | grep xxx
Xxx debe reemplazarse como nombre de gema que va a buscar
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-09 15:50:52
Probablemente haya una forma más directa de averiguar esto, 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-25 17:42:18
También hay una lista en Gemfile.lock
, ubicada en el directorio raíz de tu 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 cambios bruscos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-18 20:56:50
Intenta 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 un gem
particular debe usar la aplicación. 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 versión más reciente de esa gema.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 05:15:48
gem list <gemname>
Mostrará todas las gemas coincidentes, por ejemplo, si alguna lo hace
gem list rack
Entonces la salida th 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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-07 07:54:08
script/about
te dirá qué versiones de los Rails principales y gemas de Rack estás usando, pero no nada más. Idealmente, 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 las gemas y versiones necesarias allí. Sin embargo, las versiones son opcionales en este archivo, y en última instancia, nada detiene a un desarrollador inexperto de simplemente abofetear un require 'rubygems'; require 'some_random_thing'
en la parte superior de cualquier archivo dado.
Si ves que una gema se requiere, pero no se especifica ninguna 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-25 21:39:49
bundle exec gem which gem_name
Es probablemente lo que puedes usar:
$› bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-24 10:55:00
Prueba esta para la gema local:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Si utiliza bundle:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-26 09:59:59
En Gemfile, debería haber la respuesta:
gem 'rails', '4.0.0.rc1'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-17 11:05:00