Railsアプリが使用しているgemのバージョンを確認する方法
-
06-07-2019 - |
質問
railsアプリを調査しています-prodサーバーには特定のgemの2つのバージョンがインストールされていますが、prodアプリが使用しているバージョンを確認するにはどうすればよいですか?
解決
Rails 3およびRails 4では、 bundle show
Rails 2では、 rake gems
は、インストールされている、凍結されている、gem、依存関係、バージョンなどを出力します。
他のヒント
バンドラーを使用している場合は、次からバージョンを取得できます
bundle show [gemname]
この情報を見つけて整理するのに予想以上に時間がかかったので、他の人が見られるように、ここに投稿したかったのです。また、Rails 3でこれを少し明確にしたかったのです。
-
script / aboutは
rake about
に置き換えられました。詳細はこちら。 Rails 3のすべてのコマンドライン変更のリストに興味がある場合は、こちらで見つけることができます。 -
rake gems
はRails 3では機能しません。代わりに、bundle show
を使用する必要があります。
例として、gemのすべてのバージョンをファイルに保存して表示することができます:
宝石リスト> all_gems.txt
そしてRailsアプリがどのバージョンで使用しているかを見ることができます:
バンドルショー> project_gems.txt
Vimなどのエディターを使用すると、vimdiffを使用して簡単に変更を確認できます
おそらくこれを見つけるためのより直接的な方法がありますが、コンソールをロードし、そのような特定のバージョンが必要な場合:
gem 'RedCloth', '3.0.4'
どのバージョンがすでにアクティブ化されているかがわかります:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
アプリのルートディレクトリにある Gemfile.lock
にもリストがあります。
このため、 .gitignore
から Gemfile.lock
を除外します。これにより、 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 and 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'を叩くのを止めることはできません。特定のファイルの先頭に「some_random_thing」
が必要です。
gemが必要であるがバージョンが指定されていない場合、 gem list
と入力して、システム上のすべてのgemのすべてのバージョンを表示できます。デフォルトでは、利用可能な最新のものを使用します。
bundle exec gem which gem_name
おそらくあなたが使用できるものです:
<*>#8250; bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb
ローカルgemでこれを試してください:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
バンドルを使用する場合:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
bundle show gemname つまり、工夫するためには次のように書く必要があります
bundle show devise
そして現在のgemバージョンを印刷します。
Gemfileには、答えがあるはずです:
gem 'rails', '4.0.0.rc1'