Зачем вам нужно «требовать« пакет / настройка »»? - PullRequest
27 голосов
/ 30 августа 2011

Почти в каждом примере с Sinatra, который я видел, несмотря на то, что он делает, он всегда имеет следующие две строки:

require 'rubygems'
require 'bundler/setup'

В большинстве примеров удаление требования 'bundler / setup', по-видимому, не имеет разрушающего эффекта, поэтому я не понимаю, когда и где мне нужно это включить.

Я ненавижу использовать вещи, не зная точно причины их присутствия, поэтому я надеялась, что кто-нибудь сможет объяснить, почему мне нужны обе строки и что они делают?

Ответы [ 4 ]

15 голосов
/ 30 августа 2011

Это гарантирует, что вы загружаете гемы, определенные в Gemfile. Пожалуйста, ознакомьтесь с документацией здесь https://bundler.io/v1.12/bundler_setup.html

7 голосов
/ 01 ноября 2014

Есть практическое объяснение:

Допустим, мы хотим использовать гем pristine_text из главной ветви github

Gemfile:

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

main.rb: (неправильно)

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

require не может найти его, потому что драгоценный камень не находится в пути, который может увидеть ruby.Если вы посмотрите на фактический путь драгоценного камня, вы увидите, что он находится под

/pristine-text-some_commit_id

main.rb: (справа)

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

ошибка исчезла, потому что теперь вы загружаете компоновщик с путями загрузки ваших зависимостей.

4 голосов
/ 17 февраля 2017

Понимание процесса установки Bundler

Брайан Сторти написал лучшую статью, которую я могу найти по настройке Bundler - из которой взята цитата .

Понимание того, что происходит

Короче говоря, то, что делает Bundler, удаляет из $ LOAD_PATH все, что не определено в Gemfile.$ LOAD_PATH (или просто $ :) - это глобальная переменная, которая указывает Ruby, где следует искать необходимые вещи, поэтому, если зависимость не находится в Gemfile, она не будет в $ LOAD_PATH, а затем Rubyнет способа его найти.

Покажите мне код

Этот - это файл, который загружается, когда нам требуется 'bundler / setup', и здесь важна следующая вещь: Bundler.setup вызов.Эта установка сначала очищает путь загрузки , а затем активирует только драгоценные камни, которые определены в Gemfile, что в основном означает добавление их в переменную $ LOAD_PATH .

Примечание: я обновил ссылки "покажи мне код", когда они перешли в ветку master, которая изменилась.

4 голосов
/ 19 апреля 2012

Настройка Bundle «очищает» путь загрузки, поэтому последующая попытка потребовать чего-то, чего нет в Gemfile, приведет к ошибке загрузки.

...