How to tell which version of a gem a rails app is using

Ruby on-RailsRubygems

Ruby on-Rails Problem Overview


I'm investigating a rails app - the prod server has two version of a specific gem installed, how can I tell which version the prod app is using?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

In Rails 3 and Rails 4, use bundle show

In Rails 2, rake gems will print out what gems, dependencies, and versions are installed, frozen, etc.

Solution 2 - Ruby on-Rails

If you use bundler, then you can get the version from

bundle show [gemname]

Solution 3 - Ruby on-Rails

It took me longer than expected to find and sort through this information so I wanted to post it here in one place for others to view. I also wanted to clarify this a bit for Rails 3:

  • script/about has been replaced with rake about The details are here. If you are interested a list of all the command line changes for Rails 3 they can be found here.

  • rake gems does not work in Rails 3. Instead you should use bundle show

As an example, you can save all versions of your gems to a file for viewing with:

gem list > all_gems.txt

and you can see what versions your Rails app is using with:

bundle show > project_gems.txt

Using an editor like Vim you can easily use vimdiff to see the changes

Solution 4 - Ruby on-Rails

In the terminal

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

or

  gem list | grep <gem-name>

For example:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

Solution 5 - Ruby on-Rails

There probably is a more direct way to find this out, but if you load up a console and require a specific version like so:

gem 'RedCloth', '3.0.4'

It will tell you what version is already activated:

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

Solution 6 - Ruby on-Rails

There's also a list in Gemfile.lock, located in the root directory of your app.

For this reason I leave Gemfile.lock out of my .gitignore. This has saved me more than once when I forgot to specify the gem version in GemFile, and a gem got updated with breaking changes.

Solution 7 - Ruby on-Rails

Try using script/about. Your config/environment.rb also has information about it.

In your config/environment.rb you can specify which version of a particular gem the application should use. However if you have multiple versions of a gem installed on your machine and you do not specify the version, the latest version of that gem will be used by the application.

Solution 8 - Ruby on-Rails

gem list <gemname>

It will show all the matching gems e.g if some one do

gem list rack

Then th output will be as following

*** LOCAL GEMS ***

rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)

Solution 9 - Ruby on-Rails

script/about will tell you what versions of the core Rails and Rack gems you're using, but not anything else. Ideally, if you look in config/environment.rb, there should be a section that looks like this:

# 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"

With any luck, the author of the app will have included any required gems and versions there. However, the versions are optional in this file, and ultimately nothing stops an inexperienced developer from just slapping a require 'rubygems'; require 'some_random_thing' at the top of any given file.

If you see that a gem is being required, but no version is specified, you can type gem list to see all the versions of all the gems on the system. By default, it will be using the latest one available.

Solution 10 - Ruby on-Rails

bundle exec gem which gem_name

Is probably what you can use:

$› bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb

Solution 11 - Ruby on-Rails

bundle show gemname I.e for devise you have to write like

bundle show devise

and it will printout the current gem version.

Solution 12 - Ruby on-Rails

In newer version, used bundle show gem_name

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

Solution 13 - Ruby on-Rails

If you use bundler, then you can get the version using:

bundle info [gemname]

Solution 14 - Ruby on-Rails

try this one for local gem :

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

If you use bundle:

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

Solution 15 - Ruby on-Rails

In Gemfile , there should be the answer:

gem 'rails', '4.0.0.rc1'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSteve BrewerView Question on Stackoverflow
Solution 1 - Ruby on-RailsBJ ClarkView Answer on Stackoverflow
Solution 2 - Ruby on-RailsStinaView Answer on Stackoverflow
Solution 3 - Ruby on-RailsSnapShotView Answer on Stackoverflow
Solution 4 - Ruby on-RailsxyingsoftView Answer on Stackoverflow
Solution 5 - Ruby on-RailsgtdView Answer on Stackoverflow
Solution 6 - Ruby on-RailsSooDesuNeView Answer on Stackoverflow
Solution 7 - Ruby on-RailsWaseemView Answer on Stackoverflow
Solution 8 - Ruby on-RailsManiView Answer on Stackoverflow
Solution 9 - Ruby on-RailsJohn HylandView Answer on Stackoverflow
Solution 10 - Ruby on-RailsJAR.JAR.beansView Answer on Stackoverflow
Solution 11 - Ruby on-RailsBilal A.AwanView Answer on Stackoverflow
Solution 12 - Ruby on-Railsaldrien.hView Answer on Stackoverflow
Solution 13 - Ruby on-RailscollimarcoView Answer on Stackoverflow
Solution 14 - Ruby on-RailsSunil ShakyaView Answer on Stackoverflow
Solution 15 - Ruby on-RailsgprasantView Answer on Stackoverflow