Estou investigando um aplicativo rails - o servidor prod tem duas versões de uma gem específica instalada, como posso saber qual versão o aplicativo prod está usando?
Estou investigando um aplicativo rails - o servidor prod tem duas versões de uma gem específica instalada, como posso saber qual versão o aplicativo prod está usando?
Respostas:
No Rails 3 e Rails 4, use bundle show
No Rails 2, rake gems
imprimirá quais gems, dependências e versões estão instaladas, congeladas, etc.
bundle show | grep gem_name
, faça , por exemplo, para bússola:bundle show | grep compass
Se você usa bundler, pode obter a versão de
bundle show [gemname]
bundle info [gemname]
lugar.
Levei mais tempo do que o esperado para encontrar e classificar essas informações, então eu queria postá-las aqui em um lugar para que outras pessoas as vissem. Eu também queria esclarecer isso um pouco para Rails 3:
script / about foi substituído por rake about
Os detalhes estão aqui . Se você estiver interessado, uma lista de todas as mudanças de linha de comando para Rails 3 pode ser encontrada aqui .
rake gems
não funciona no Rails 3. Em vez disso, você deve usar bundle show
Por exemplo, você pode salvar todas as versões de suas joias em um arquivo para visualização com:
gem list > all_gems.txt
e você pode ver quais versões seu aplicativo Rails está usando com:
bundle show > project_gems.txt
Usando um editor como o Vim, você pode facilmente usar o vimdiff para ver as mudanças
Provavelmente existe uma maneira mais direta de descobrir isso, mas se você carregar um console e exigir uma versão específica como esta:
gem 'RedCloth', '3.0.4'
Ele dirá qual versão já está ativada:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
Tente usar script/about
. Você config/environment.rb
também tem informações sobre isso.
Em seu, config/environment.rb
você pode especificar qual versão de um determinado gem
aplicativo deve usar. No entanto, se você tiver várias versões de um gem
instalado em sua máquina e não especificar a versão, a versão mais recente dessa gem será usada pelo aplicativo.
gem list <gemname>
Irá mostrar todas as joias correspondentes, por exemplo, se alguém fizer
gem list rack
Então, a saída será a seguinte
*** LOCAL GEMS ***
rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
script/about
dirá quais versões das gemas principais do Rails e Rack você está usando, mas nada mais. Idealmente, se você olhar para dentro config/environment.rb
, deve haver uma seção semelhante a esta:
# 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"
Com alguma sorte, o autor do aplicativo terá incluído todas as gemas e versões necessárias. No entanto, as versões são opcionais neste arquivo e, em última análise, nada impede um desenvolvedor inexperiente de simplesmente colocar um require 'rubygems'; require 'some_random_thing'
no topo de qualquer arquivo.
Se você vir que uma gema está sendo necessária, mas nenhuma versão foi especificada, você pode digitar gem list
para ver todas as versões de todas as gemas no sistema. Por padrão, ele usará o mais recente disponível.
bundle exec gem which gem_name
Provavelmente é o que você pode 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
bundle show gemname Ie, para inventar você tem que escrever como
bundle show devise
e imprimirá a versão gem atual.
experimente este para gema local:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Se você usar o pacote:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Se você usa bundler, pode obter a versão usando:
bundle info [gemname]