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

时间:2013-01-03 14:51:34

标签: ruby ruby-on-rails-3 version-control gem

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

gem 'sqlite3', '1.3.6'

但是,如果我列出我的本地宝石,我会得到:

> gem list sqlite3 --local

*** LOCAL GEMS ***

sqlite3 (1.3.6, 1.3.4)

当我的Rails应用程序执行

require 'sqlite3'

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

3 个答案:

答案 0 :(得分:2)

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" 

答案 1 :(得分:2)

你可以找到

bundle exec gem list sqlite3

答案 2 :(得分:0)

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

通常,您的应用所需的宝石的确切版本位于Gemfile.lock

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

  • gem 'gemname', '1.2.3' - 需要gemname版本1.2.3
  • gem 'gemname', '>= 1.2.3' - 需要gemname版本1.2.3或更高版本。可以破坏事情
  • gem 'gemname', '~> 1.2' - 需要宝石名称1.2或次要更新,如1.2.9。你得到的更新,但没有市长可以破坏兼容性

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

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

  1. 如果需要,请更新Gemfile
  2. 运行bundle update gemname
  3. 第2步将下载新的gem版本(如果有Gemfile中有关于约束的新版本),请安装它并相应地更新Gemfile.lock