Ruby:Rails:使用哪个版本的gem?

我有一个Rails 3应用程序,它在Gemfile中有以下行。

gem 'sqlite3', '1.3.6' 

但是,如果我列出我的本地gem,我得到:

 > gem list sqlite3 --local *** LOCAL GEMS *** sqlite3 (1.3.6, 1.3.4) 

当我的Rails应用程序执行时

 require 'sqlite3' 

选择了哪个版本的gem? 是否选择了列表中的第一个gem? 有没有办法告诉Ruby运行时使用版本1.3.4,即使安装了1.3.6版本,并且Gemfile强制要求?

Gemfile将指定版本或Gemfile.lock将具有版本。

例子:

的Gemfile:

 gem 'tiny_tds', '0.5.0' 

Gemfile.lock的:

 tiny_tds (0.5.0) 

编辑:如果您想查看版本,请使用iltempos的建议或在rails console类型中

 1.9.3p194 :001 > SQLite3::VERSION => "1.3.6" 

你可以找到

 bundle exec gem list sqlite3 

Gemfile列出了Rails应用程序的所有依赖项,您可以添加有关每个gem使用的版本的约束。 在您的示例中,您指定您的应用程序依赖于sqlite3 1.3.6,因此它将使用版本1.3.6

通常,应用程序所需的gems的确切版本位于Gemfile.lock

您可以使用几种语法来指定版本:

  • gem 'gemname', '1.2.3' – 需要gemname版本1.2.3
  • gem 'gemname', '>= 1.2.3' – 需要gemname版本1.2.3或更高版本。 可以打破一切
  • gem 'gemname', '~> 1.2' – 需要gemname 1.2或者像1.2.9这样的次要更新。 您获得更新但不是市长可能会破坏兼容性

有趣的是,一旦在你的版本控制中编写并检查了Gemfile.lock ,它就会在团队的所有成员之间共享,所有成员都将使用所需gem的相同,精确版本。

如果您需要更新所需的gem,您可以分两步完成:

  1. 如果需要,更新Gemfile
  2. 运行bundle update gemname

第2步将下载新的gem版本(如果有一个新版本尊重Gemfile的约束),安装它并相应地更新Gemfile.lock