为什么需要“require'bundler / setup'”?

时间:2011-08-30 12:58:08

标签: ruby bundler

在我见过的几乎所有Sinatra例子中,尽管它做了什么,它总是有以下两行:

require 'rubygems'
require 'bundler/setup'

在大多数示例中,删除'bundler / setup'需要似乎没有破坏效果,所以我很困惑何时/何时需要包含它。

我讨厌使用的东西而不确切知道它存在的原因,所以我希望有人可以解释为什么我需要这两条线以及它们做什么?

4 个答案:

答案 0 :(得分:15)

它确保您加载Gemfile定义的gem。请查看此处的文档https://bundler.io/v1.12/bundler_setup.html

答案 1 :(得分:6)

有一个实际的解释:

假设我们想从github master分支使用名为pristine_text的gem

的Gemfile:

gem "pristine_text", github: "nurettin/pristine_text"

main.rb :(错误)

require "pristine_text"
# error, can't find pristine_text

要求找不到它,因为宝石不在ruby可以看到的路径中。如果你看一下gem的实际路径,你会看到它在

之下

/pristine-text-some_commit_id

main.rb :(右)

require "bundler/setup"
require "pristine_text"
# no error

错误消失了,因为现在您使用依赖项的加载路径加载bundler。

答案 2 :(得分:4)

Bundle安装程序“清除”加载路径,因此后续尝试要求不在Gemfile中的内容将导致加载错误。

答案 3 :(得分:4)

Understanding Bundler's setup process

Brian Storti wrote the best article I can find on Bundler setup - from which the quote is taken

  

了解正在发生的事情

     

简而言之,Bundler正在做的是从$ LOAD_PATH中删除未在Gemfile中定义的所有内容。 $ LOAD_PATH(或者只是$ :)是一个全局变量,它告诉Ruby它应该在哪里查找所需的东西,所以如果一个依赖项不在Gemfile中,它就不会在$ LOAD_PATH中,然后Ruby有无法找到它。

     

显示代码

     

This是我们需要'bundler / setup'时加载的文件,重要的是Bundler.setup调用。此设置首先cleans the load path,然后activates只是Gemfile中定义的宝石,这基本上意味着adding them to the $LOAD_PATH variable

注意:我已经更新了“显示代码”链接,因为它们已转到已更改的主分支。