我是一名新手程序员,正在学习 Michael Hartl 的 railstutorial。我注意到在应用程序中使用 gem 的过程是通过将它添加到 Gemfile 中,然后执行以下操作:
$ bundle install
有没有任何理由不直接执行以下操作:
$ [sudo] gem install [the_gem]
那么只需将它添加到 Gem 文件中即可吗?我知道在 Rails 2 中这在某种程度上是该过程。
谢谢!
我是一名新手程序员,正在学习 Michael Hartl 的 railstutorial。我注意到在应用程序中使用 gem 的过程是通过将它添加到 Gemfile 中,然后执行以下操作:
$ bundle install
有没有任何理由不直接执行以下操作:
$ [sudo] gem install [the_gem]
那么只需将它添加到 Gem 文件中即可吗?我知道在 Rails 2 中这在某种程度上是该过程。
谢谢!
使用Bundler代替gem命令直接安装您的gems会带来很多好处。
在这种情况下,您建议使用gem命令进行安装,并稍后将其添加到Gemfile中。当您安装一个gem时,bundler会为您解决所有依赖关系,否则您可能需要手动解决。
举个例子,让我们看一下以下依赖关系:
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在后台为您执行的操作。
有些宝石组合只在特定的环境下才有意义 - 例如在开发中使用某个数据库,在生产中使用不同的数据库。
Gemfile 记录了应用程序在每个环境中所需的内容,bundle install
安装了确切需要的内容,并处理依赖关系。
如果 Gemfile 中的任何宝石已经通过 gem install
安装在当前 gemset 中,则 bundler 将直接使用它们(而不是重新安装)。