2013-01-03 37 views
3

我有一個Rails 3應用程序,它在Gemfile中有以下行。Ruby:Rails:使用哪個版本的寶石?

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強制?

回答

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

你可以找到與

bundle exec gem list sqlite3 
0

Gemfile列表Rails應用程序的所有依賴,就可以對版本用於每個寶石加約束。 在您的示例中,您指定應用程序依賴於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' - 需要gemname 1.2或更新如1.2.9。你得到那些可能會破壞兼容性

有趣的事情需要注意的是,一旦Gemfile.lock寫入和版本控制檢查,這是團隊的所有成員都將使用共享更新,但不是市長一個同樣的,確切的,所需的寶石版本。

如果您需要更新所需的寶石,你可以做,在2個步驟:

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

步驟2將下載新的寶石版本(如果存在關於Gemfile中的限制的新版本),則安裝它並相應地更新Gemfile.lock