Ruby: Rails:使用哪个版本的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'

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

你可以用

bundle exec gem list sqlite3

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" 

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,你可以分两步完成:

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

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

相关内容

  • 没有找到相关文章

最新更新