我是一名初学者程序员,正在阅读 michael hartl编写的 railstutorial,并注意到在应用程序中使用 gems 的过程是通过将其添加到 gemfile 中,然后执行以下操作:
$ bundle install
一个人不只是做的任何理由:
$ [sudo] gem install [the_gem]
然后将其添加到 Gem 文件中?我知道这在某种程度上是 rails 2 中的过程。
谢谢!
我是一名初学者程序员,正在阅读 michael hartl编写的 railstutorial,并注意到在应用程序中使用 gems 的过程是通过将其添加到 gemfile 中,然后执行以下操作:
$ bundle install
一个人不只是做的任何理由:
$ [sudo] gem install [the_gem]
然后将其添加到 Gem 文件中?我知道这在某种程度上是 rails 2 中的过程。
谢谢!
使用 bundler 而不是 gem 命令直接安装你的 gem 会给你带来很多好处。
在您建议使用 gem 命令安装并稍后将其添加到 Gemfile 的这种特定情况下,bundler 将在您安装 gem 时为您解析所有依赖项,否则您可能必须手动解析。
举个例子,让我们看一下以下依赖项:
sunspot_rails
nokogiri (>= 1.2.0)
webrat
nokogiri (>= 1.3)
webrat 和 sunspot_rails gem 都需要不同版本的 nokogiri 作为依赖项。如果您只是使用 gem 命令安装它们,它可能会同时安装两个版本的 nokogiri,或者更糟的是抱怨版本冲突。Bundler 将明智地解决此依赖冲突并安装正确的版本(例如 nokogiri 1.3)并使 sunspot_rails 和 webrat 都满意!
抱歉,解释太长了。但是,希望你明白这一点!:)
顺便说一句,你应该看看这个文件Gemfile.lock
,看看 bundler 在幕后为你做了什么。
一些 gem 组合仅在特定环境中才有意义 - 例如,开发中的某个数据库和生产中的不同数据库。
Gemfile 记录了您的应用程序在每个环境中的需求,并bundle install
准确安装所需的内容,并处理依赖关系。
如果您的 Gemfile 中的任何 gem 已经安装在您当前的 gemset 中(通过gem install
),那么捆绑器将只使用它们(而不是重新安装它们)。
使用 Gemfile,您可以确保任何其他也在您的应用程序上工作的开发人员拥有每个 gem 的相同版本。它还确保您没有在 gem commmand 中放置与 Gemfile 中不同的 [the_gem]。