Como saber qual versão de uma jóia de um aplicativo de trilhos está usando
-
06-07-2019 - |
Pergunta
Eu estou investigando um rails app -? O servidor prod tem duas versões de uma jóia específico instalado, como posso saber qual versão do aplicativo prod está usando
Solução
Em Rails 3 e Rails 4, o uso bundle show
Em Rails 2, rake gems
irá imprimir o gemas, dependências e versões estão instalados, congelados, etc.
Outras dicas
Se você usar bundler, então você pode obter a versão de
bundle show [gemname]
Ele me levou mais tempo do que o esperado para encontrar e classificar através desta informação, então eu queria publicá-la aqui em um lugar para que outros vejam. Eu também queria esclarecer isso um pouco para Rails 3:
-
script / cerca foi substituído por
rake about
Os detalhes são aqui . Se você está interessado uma lista de todas as alterações de linha de comando para Rails 3 eles podem ser encontrados aqui . -
rake gems
não funciona no Rails 3. Em vez disso você deve usarbundle show
Como um exemplo, você pode salvar todas as versões de suas jóias para um arquivo para visualização com:
gem list > all_gems.txt
e você pode ver o que as versões a sua aplicação Rails está usando com:
bundle show > project_gems.txt
Usando um editor como Vim você pode facilmente usar vimdiff para ver as alterações
Provavelmente há uma maneira mais direta de descobrir isso, mas se você carregar um console e requerem uma versão específica assim:
gem 'RedCloth', '3.0.4'
Ele irá dizer-lhe qual a versão já está ativado:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
Há também uma lista em Gemfile.lock
, localizado no diretório raiz do seu aplicativo.
Por isso deixo Gemfile.lock
fora do meu .gitignore
. Isso me salvou mais de uma vez, quando eu esqueci de especificar a versão jóia em GemFile
, e uma jóia foi atualizado com alterações significativas.
No terminal
bundle show [gem-name]
bundle show | grep [gem-name]
ou
gem list | grep [gem-name]
[gem-name] deve ser substituído o nome jóia que você vai procurar.
Tente usar script/about
. Seu config/environment.rb
também tem informações sobre ele.
Em seu config/environment.rb
você pode especificar qual versão de um gem
particular, a aplicação deve usar. No entanto, se você tiver várias versões de um gem
instalado em sua máquina e você não especificar a versão, a versão mais recente do que gem será usado pelo aplicativo.
gem list <gemname>
Ela vai mostrar todas as pedras preciosas correspondentes por exemplo se alguém fazer
gem list rack
Em seguida, th saída será da seguinte forma
*** LOCAL GEMS ***
rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
script/about
vai dizer o que versões dos Rails core e cremalheira gemas que você está usando, mas não qualquer outra coisa. Idealmente, se você olhar no config/environment.rb
, deve haver uma seção que se parece com isso:
# 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 irá ter incluído quaisquer gemas e versões necessárias lá. No entanto, as versões são opcionais neste arquivo, e, finalmente, nada impede que um desenvolvedor inexperiente de apenas tapa uma require 'rubygems'; require 'some_random_thing'
no topo de qualquer arquivo dado.
Se você ver que uma jóia está sendo exigido, mas nenhuma versão for especificada, pode escrever gem list
para ver todas as versões de todas as pedras preciosas sobre o sistema. Por padrão, ele estará usando 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
tentar um presente para jóia local:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Se você usar o pacote:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
show de pacote gemname Ou seja para conceber você tem que escrever como
bundle show devise
e vai printout a versão atual jóia.
Em Gemfile, deve haver a resposta:
gem 'rails', '4.0.0.rc1'