如何判断rails应用程序使用的gem版本

时间:2009-10-25 17:00:37

标签: ruby-on-rails rubygems

我正在调查一个rails应用程序 - prod服务器安装了两个特定gem的版本,如何判断prod应用程序使用的是哪个版本?

15 个答案:

答案 0 :(得分:163)

在Rails 3和Rails 4中,使用bundle show

在Rails 2中,rake gems将打印出安装,冻结等所有宝石,依赖项和版本。

答案 1 :(得分:37)

如果使用bundler,则可以从

获取版本
bundle show [gemname]

答案 2 :(得分:37)

我花了比预期更长的时间来查找和整理这些信息,所以我想将它发布在一个地方供其他人查看。我还想为Rails 3澄清一点:

  • 脚本/ about已替换为rake about详细信息为here。如果您对Rails 3的所有命令行更改列表感兴趣,可以找到它们here

  • rake gems在Rails 3中不起作用。相反,您应该使用bundle show

例如,您可以将所有版本的宝石保存到文件中,以便查看:

gem list > all_gems.txt

你可以看到你的Rails应用程序使用的版本:

bundle show > project_gems.txt

使用像Vim这样的编辑器,您可以轻松使用vimdiff查看更改

答案 3 :(得分:5)

可能有一种更直接的方法可以找到它,但是如果你加载一个控制台并需要一个特定的版本:

gem 'RedCloth', '3.0.4'

它将告诉您已激活的版本:

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

答案 4 :(得分:5)

Gemfile.lock中还有一个列表,位于应用的根目录中。

出于这个原因,我将Gemfile.lock从我的.gitignore中删除。当我忘记在GemFile中指定gem版本时,这已经不止一次地拯救了我,并且宝石已经更新了更改。

答案 5 :(得分:5)

在终端

bundle show [gem-name]
bundle show | grep [gem-name]

gem list | grep [gem-name]

[gem-name]应该替换为您要查找的宝石名称。

答案 6 :(得分:4)

尝试使用script/about。您的config/environment.rb也有相关信息。

config/environment.rb中,您可以指定应用程序应使用的特定gem的版本。但是,如果您的计算机上安装了gem的多个版本且未指定版本,则该应用程序将使用该gem的最新版本。

答案 7 :(得分:3)

gem list <gemname>

它将显示所有匹配的gems,例如,如果有人

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)

答案 8 :(得分:2)

script/about将告诉您正在使用的核心Rails和Rack宝石的版本,但不会告诉您。理想情况下,如果您查看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的所有版本。默认情况下,它将使用最新的可用。

答案 9 :(得分: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

答案 10 :(得分:1)

在较新的版本中,使用bundle show gem_name

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

答案 11 :(得分:0)

尝试本地宝石:

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

如果你使用bundle:

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

答案 12 :(得分:0)

捆绑秀宝石名称 即为了设计,您必须像这样写

bundle show devise

,它将打印出当前的gem版本。

答案 13 :(得分:0)

如果使用捆绑程序,则可以使用以下命令获取版本:

bundle info [gemname]

答案 14 :(得分:-8)

在Gemfile中,应该有答案:

gem 'rails', '4.0.0.rc1'