Railsアプリが使用しているGemのバージョンを確認する方法


116

Railsアプリを調査しています-prodサーバーには特定のgemの2つのバージョンがインストールされています。prodアプリが使用しているバージョンを確認するにはどうすればよいですか?


Railsのどのバージョン、または他のGemのどのバージョンを求めていますか?
BJクラーク

1
特定の宝石のどのバージョン。
Steve Brewer、

vendors / gemsでgemをフリーズしていて、新しいバージョンのgemがデフォルトのgemsの場所にインストールされています。「この場所からこの宝石をロードしました」と書かれたレールから何かを見ています。
スティーブブリューワー、

回答:


172

Rails 3およびRails 4では、 bundle show

Rails 2では、rake gemsインストール、フリーズなどされているgem、依存関係、バージョンを出力します。


2
これは、gemがenvironment.rbファイルで指定されている場合にのみ機能します。開発者がどこかでそれを要求しただけでは、rake gemは機能しません。
ジョンハイランド

(または、RAILS_ENVに応じて、config / environments / *ファイルの1つに含まれます。)
John Hyland

2
あなたがリストをフィルタリングする場合はbundle show | grep gem_nameコンパスのための、例:bundle show | grep compass
アダム・ウェイト

つまり、bundle showと入力して、「rails 2.3.17」を含むバージョンの一連の宝石を取得し、rake gemsと入力すると、凡例のように表示されますが(I = Installedなど)、gem /はありません。バージョン?Railsバージョン2があるかどうか?おそらくRailsバージョン2とより高度なバンドラーがあるか?これは良い/悪いですか?(はい、そのような古いバージョンのRailsがあることは悪いことですが、それは)(それがある場合)は、aが不一致持って壊滅的だレールとバンドラ。
ブレンダ・J.バトラー

39

bundlerを使用している場合は、次の場所からバージョンを取得できます

bundle show [gemname]


これは非推奨です。bundle info [gemname]代わりに使用してください。
collimarco

37

この情報を見つけて並べ替えるのに予想以上に時間がかかったので、他の人が見られるように1つの場所に投稿したいと思いました。Rails 3についても、これを少し明確にしたかったのです。

  • script / aboutはに置き換えられましたrake about 。詳細はこちらです。Rails 3のすべてのコマンドラインの変更点の一覧が必要な場合は、こちらで確認できます

  • rake gems Rails 3では機能しません。代わりに bundle show

例として、gemのすべてのバージョンをファイルに保存して、表示することができます。

gem list > all_gems.txt

Railsアプリが使用しているバージョンを確認できます。

bundle show > project_gems.txt

Vimなどのエディターを使用すると、vimdiffを簡単に使用して変更を確認できます


6

おそらくこれを見つけるためのより直接的な方法があるでしょうが、コンソールをロードしてそのような特定のバージョンが必要な場合:

gem 'RedCloth', '3.0.4'

どのバージョンがすでにアクティブ化されているかがわかります。

=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2

6

ターミナルで

  bundle show <gem-name>
  bundle show | grep <gem-name>

または

  gem list | grep <gem-name>

例えば:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

にもリストがあります Gemfile.lock、アプリのルートディレクトリにあります。

このような理由から、私は去るGemfile.lock私のうち.gitignore。これで、gemのバージョンをで指定するのを忘れたときに、何度も節約GemFileできました。gemは、重大な変更で更新されました。


4

を使用してみてくださいscript/about。あなたにconfig/environment.rbもそれについての情報があります。

で、アプリケーションが使用config/environment.rbする特定gemのバージョンを指定できます。ただしgem、マシンに複数のバージョンがインストールされており、バージョンを指定しない場合、そのgemの最新バージョンがアプリケーションによって使用されます。


3
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)

2

script/about使用しているコアのRailsおよびRack gemのバージョンがわかりますが、他のバージョンはわかりません。理想的には、を見ると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"

運が良ければ、アプリの作成者は必要な宝石とバージョンをそこに含めます。ただし、このファイルではバージョンはオプションであり、最終的には、経験の浅い開発者が単にrequire 'rubygems'; require 'some_random_thing'特定のファイルの先頭でをはできません。

gemが必要であるが、バージョンが指定されていない場合は、入力gem listして、システム上のすべてのgemのすべてのバージョンを表示できます。デフォルトでは、入手可能な最新のものを使用します。


あなたのスクリプト/については宝石について教えてくれますか?私が使っているruby、rails、environmentのバージョンを教えてくれます。
BJクラーク

Rails(およびRack)はどちらもgemであり、script / aboutはそれらのどのバージョンが実行されているかを、コアRailsのもの(ActiveSupportなど)とともに通知しますが、他のgemについては通知しません。それが明確でない場合は申し訳ありません。
ジョンハイランド

1
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

グローバルにインストールされたgem gem which gem_name
のどの

1

bundle show gemname Ie for deviseあなたは次のように書く必要があります

bundle show devise

そして、それは現在の宝石バージョンを印刷します。


0

これを地元の宝石に試してみてください:

gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

バンドルを使用する場合:

bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

0

新しいバージョンでは、使用 bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`

0

バンドラーを使用している場合は、次を使用してバージョンを取得できます。

bundle info [gemname]

-8

Gemfileには答えがあるはずです:

gem 'rails', '4.0.0.rc1'

2
Gemfileバージョン番号を常に明示的に宣言するとは限りません。
Tass
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.