Railsアプリ-prodサーバーには特定のgemの2つのバージョンがインストールされていますが、prodアプリが使用しているバージョンを確認するにはどうすればよいですか?
Rails 3 and Rails 4、use bundle show
In Rails 2、rake gems
は、どのgem、依存関係、およびバージョンがインストールされているか、フリーズされているかなどを出力します。
この情報を見つけて分類するのに予想以上に時間がかかったので、他の人が見られるように、ここに投稿したかったのです。 Rails 3:
script/aboutはrake about
に置き換えられました。詳細は here です。 Rails 3のすべてのコマンドラインの変更のリストに興味がある場合は、それらを見つけることができます here 。
rake gems
はRails 3.では動作しません。代わりにbundle show
を使用する必要があります
例として、次のコマンドを使用して、表示するgemのすべてのバージョンをファイルに保存できます。
gem list > all_gems.txt
また、Railsアプリが使用しているバージョンを確認できます。
bundle show > project_gems.txt
Vimのようなエディターを使用すると、vimdiffを使用して簡単に変更を確認できます。
バンドラーを使用する場合は、バージョンを次から取得できます。
bundle show [gemname]
これを見つけるためのより直接的な方法はおそらくありますが、コンソールをロードし、次のような特定のバージョンが必要な場合:
gem 'RedCloth', '3.0.4'
すでにアクティブ化されているバージョンがわかります。
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
アプリのルートディレクトリにあるGemfile.lock
にもリストがあります。
このため、Gemfile.lock
を.gitignore
から除外します。これにより、GemFile
でgemバージョンを指定するのを忘れたときに何度も保存され、重大な変更が加えられたgemが更新されました。
ターミナルで
bundle show [gem-name]
bundle show | grep [gem-name]
または
gem list | grep [gem-name]
[gem-name]は、探しているgem名として置き換える必要があります。
script/about
を使用してみてください。 config/environment.rb
にも情報があります。
config/environment.rb
で、アプリケーションが使用する特定のgem
のバージョンを指定できます。ただし、マシンにgem
の複数のバージョンがインストールされており、バージョンを指定しない場合、そのgemの最新バージョンがアプリケーションによって使用されます。
gem list <gemname>
一致するすべての宝石が表示されます。
gem list rack
次に、出力は次のようになります
*** LOCAL GEMS ***
rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
script/about
は、使用しているコアのバージョンRailsおよびRack gemsを示しますが、それ以外は何も表示しません。理想的には、config/environment.rb
、次のようなセクションがあるはずです。
# 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"
運が良ければ、アプリの作成者は必要なgemとバージョンをそこに含めます。ただし、このファイルではバージョンはオプションであり、最終的には、経験の浅い開発者がrequire 'rubygems'; require 'some_random_thing'
任意のファイルの先頭。
Gemが必要であることがわかっているが、バージョンが指定されていない場合は、gem list
システム上のすべてのgemのすべてのバージョンを表示します。デフォルトでは、利用可能な最新のものを使用します。
bundle exec gem which gem_name
おそらくあなたが使用できるものです:
$› bundle exec gem which Rails
/Users/xxxx/.rvm/gems/Ruby-2.1.2@gemset/gems/railties-4.1.7/lib/Rails.rb
bundle show gemname I.e工夫するためには、次のように書く必要があります
bundle show devise
そして、現在のgemバージョンを出力します。
地元の宝石のためにこれを試してください:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
バンドルを使用する場合:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'