ruby on rails - programas - Cómo saber qué versión de una aplicación de gem a rails está usando
ruby on rails tutorial español pdf (12)
Estoy investigando una aplicación de rieles: el servidor de prod tiene instaladas dos versiones de una gema específica, ¿cómo puedo saber qué versión usa la aplicación prod?
En Gemfile, debería haber la respuesta:
gem ''rails'', ''4.0.0.rc1''
En la terminal
gem list | grep xxx
o
bundle show | grep xxx
xxx debe reemplazarse como el nombre de la gema que va a buscar
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 una gem
particular debe usar la aplicación. Sin embargo, si tiene múltiples versiones de una gem
instaladas en su máquina y no especifica la versión, la aplicación utilizará la última versión de esa gema.
Me tomó más tiempo de lo esperado encontrar y ordenar esta información, así que quise publicarla aquí en un lugar para que otros puedan verla. También quería aclarar esto un poco para Rails 3:
script / about ha sido reemplazado con
rake about
Los detalles están here . Si le interesa una lista de todos los cambios de línea de comando para Rails 3, los puede encontrar here .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 ver 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
Probablemente haya una manera más directa de descubrir esto, pero si carga una consola y requiere 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
Si usas bundler, entonces puedes obtener la versión de
bundle show [gemname]
También hay una lista en Gemfile.lock
, que se encuentra en el directorio raíz de su aplicación.
Por este motivo, dejo mi .gitignore
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.
prueba esta de gema local:
gem list gemname | grep -P ''(^|/s)/Kgemname(?=/s|$)''
Si usa paquete:
bundle exec gem list gemname | grep -P ''(^|/s)/Kgemname(?=/s|$)''
script/about
le dirá qué versiones de las gemas principales de Rails y Rack está utilizando, pero nada más. Idealmente, si busca en config/environment.rb
, debe 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 necesarias allí. Sin embargo, las versiones son opcionales en este archivo y, en última instancia, nada impide que un desarrollador inexperto simplemente require ''rubygems''; require ''some_random_thing''
un require ''rubygems''; require ''some_random_thing''
require ''rubygems''; require ''some_random_thing''
en la parte superior de cualquier archivo dado.
Si ves que se requiere una gema, pero no se especifica ninguna versión, puedes escribir la gem list
para ver todas las versiones de todas las gemas en el sistema. Por defecto, usará el último disponible.
En Rails 3 y Rails 4, use el bundle show
En Rails 2, rake gems
imprimirá qué gemas, dependencias y versiones están instaladas, congeladas, etc.
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
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)