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

Ruby:Rails:使用哪个版本的gem?,ruby,ruby-on-rails-3,version-control,gem,Ruby,Ruby On Rails 3,Version Control,Gem,我有一个Rails 3应用程序,它的文件中有以下行 gem 'sqlite3', '1.3.6' 但是,如果我列出我的本地宝石,我会得到: > gem list sqlite3 --local *** LOCAL GEMS *** sqlite3 (1.3.6, 1.3.4) 当我的Rails应用程序运行时 require 'sqlite3' 选择了哪个版本的gem?是否选择了列表中的第一颗宝石?有没有办法告诉Ruby运行时使用版本1.3.4,即使安装了版本1.3.6,并且由Ge

我有一个Rails 3应用程序,它的文件中有以下行

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

> gem list sqlite3 --local

*** LOCAL GEMS ***

sqlite3 (1.3.6, 1.3.4)
当我的Rails应用程序运行时

require 'sqlite3'

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

Gemfile将指定一个版本,或者
Gemfile.lock
将具有该版本

示例:

档案:

gem 'tiny_tds', '0.5.0'
Gemfile.lock:

tiny_tds (0.5.0)
编辑:如果要查看版本,请使用建议或在
rails控制台中键入

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
,团队的所有成员都将共享它,所有成员都将使用所需gems的相同、精确的版本

如果您需要更新所需的gem,可以通过两个步骤完成:

  • 如果需要,更新
    GEM文件
  • 运行
    bundle更新gemname
  • 步骤2将下载新的gem版本(如果
    Gemfile
    中有关于约束的新版本),安装它并相应地更新
    Gemfile.lock