如何判断一个rails应用程序正在使用哪个版本的gem
我正在调查一个rails应用程序 – prod服务器有两个版本的特定的gem安装,我怎么知道哪个版本的prod应用程序正在使用?
在Rails 3和Rails 4中,使用bundle show
在Rails 2中, rake gems
将打印出什么gem,依赖和版本被安装,冻结等。
我花了比预期更长的时间来查找和分类这些信息,所以我想把它张贴在一个地方供其他人查看。 我也想为Rails 3澄清一点:
-
脚本/关于已被取代
rake about
细节在这里 。 如果您对Rails 3的所有命令行更改感兴趣,可以在这里find它们。 -
rake gems
不适用于Rails 3.相反,你应该使用bundle show
作为一个例子,您可以将所有版本的gem保存到一个文件,以便查看:
gem list > all_gems.txt
你可以看到你的Rails应用程序使用的是什么版本:
bundle show > project_gems.txt
使用像Vim这样的编辑器,您可以轻松使用vimdiff来查看更改
如果你使用捆绑器,那么你可以从中获取版本
bundle show [gemname]
在terminal
gem list | grep xxx
要么
bundle show | grep xxx
xxx应该被replace为您要查找的gem名称
有可能是一个更直接的方法来找出这一点,但如果你加载一个控制台,需要一个特定的版本,如:
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版本时,这已经救了我GemFile
,并且一个gem更新了突变。
尝试使用script/about
。 你的config/environment.rb
也有关于它的信息。
在你的config/environment.rb
你可以指定应用程序应该使用的特定gem
版本。 但是,如果您的计算机上安装了多个版本的gem
,并且未指定该版本,则应用程序将使用该gem的最新版本。
gem list <gemname>
它会显示所有匹配的gem,如果有人做
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和Rackgem的版本,但不是别的。 理想情况下,如果你看看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'
在任何给定文件的顶部require 'rubygems'; require 'some_random_thing'
。
如果您看到需要使用gem,但未指定版本,则可以键入gem list
以查看系统上所有gem list
所有版本。 默认情况下,它将使用最新的一个。
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 list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
如果你使用bundle:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
在Gemfile中,应该有答案:
gem 'rails', '4.0.0.rc1'
- rails 3,如何在Settings.yml文件中使用ENVconfigurationvariables?
- Rspec – Rails – 如何遵循redirect
- 使用ActiveRecord,是否有办法在after_update期间获取logging的旧值
- 是不是有一个Ruby或Ruby的主题? 对面的零? 方法?
- 在Rails 3中,当资源创build操作失败并调用render:new时,为什么URL必须更改为资源的索引url?
- 想要在Rails 3中find没有关联logging的logging
- 我如何testing一个file upload在铁轨?
- 将Rails应用程序更改为生产
- ActiveRecord使用JSON而不是YAML序列化