Como dizer qual a versão de uma gem que um aplicativo de trilhos está usando
estou a investigar um aplicativo rails - o servidor prod tem duas versões de uma gem específica instalada, como é que posso dizer qual a versão que o aplicativo prod está a usar?
12 answers
Nos carris 3 e 4, utilizar bundle show
Nos carris 2, {[1] } irá imprimir quais pedras preciosas, dependências e versões estão instaladas, congeladas, etc.
O programa / about foi substituído por
rake about
os detalhes são aqui . Se estiver interessado numa lista de todas as alterações da linha de comando para os carris 3, elas podem ser encontradas aqui.rake gems
não funciona nos carris 3. Em vez disso, deve usarbundle show
Como exemplo, pode gravar todas as versões das suas jóias num ficheiro para ver com:
gem list > all_gems.txt
E você pode ver que versões o seu aplicativo Rails está a usar com:
bundle show > project_gems.txt
Se usar um editor como o Vim, poderá usar facilmente o vimdiff para ver as alterações
Se usar o bundler, pode obter a versão de
bundle show [gemname]
No terminal
gem list | grep xxx
Ou
bundle show | grep xxx
Xxx deve ser substituído como nome gem que você vai procurar
Provavelmente há uma maneira mais directa de descobrir isto, mas se carregar uma consola e necessitar de uma versão específica como esta:
gem 'RedCloth', '3.0.4'
Dir-lhe-á qual a versão que já está activada:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
Existe também uma lista em {[[0]}, localizada no directório raiz do seu aplicativo.
Por esta razão, deixo-o fora do meu ... Isto salvou-me mais de uma vez quando me esqueci de especificar a versão gem emGemFile
, e uma gem foi actualizada com as alterações de quebra.
Tenta usar {[[0]}. O seu config/environment.rb
também tem informações sobre ele.
No seu config/environment.rb
pode especificar qual a versão de um determinado {[3] } que a aplicação deve usar. No entanto, se tiver várias versões de um gem
instalado na sua máquina e não especificar a versão, a última versão dessa jóia será usada pela aplicação.
gem list <gemname>
Mostrará todas as pedras preciosas 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-lhe-ei quais as versões dos Core Rails e das gemas Rack que está a usar, mas nada mais. Idealmente, se você olhar em config/environment.rb
, deve haver uma seção que se pareça com 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 jóias e versões necessárias lá. No entanto, as versões são opcionais neste arquivo, e, em última análise, nada impede um desenvolvedor inexperiente de apenas bater um require 'rubygems'; require 'some_random_thing'
no topo de qualquer arquivo dado.
Se vires isso a gem está sendo necessária, mas nenhuma versão é especificada, você pode digitar gem list
para ver todas as versões de todas as jóias no sistema. Por padrão, ele estará usando o mais recente disponível.
bundle exec gem which gem_name
É provavelmente o que pode usar:
$› bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb
Tenta este para a gema local:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Se utilizar pacote:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Em Gemfile , deve haver a resposta:
gem 'rails', '4.0.0.rc1'