3

我有一个 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 强制?

4

3 回答 3

2

你可以找到

bundle exec gem list sqlite3
于 2013-01-03T14:58:37.950 回答
2

要么Gemfile将指定一个版本,要么Gemfile.lock将拥有该版本。

例子:

宝石文件:

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" 
于 2013-01-03T14:53:30.077 回答
0

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

通常,您的应用程序所需的 gem 的确切版本位于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相应更新。

于 2013-01-03T15:47:54.663 回答