Подтвердить что ты не робот

Зачем вам нужно "требовать" связки/настройки? "?

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

require 'rubygems'
require 'bundler/setup'

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

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

4b9b3361

Ответ 1

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

Ответ 2

Существует практическое объяснение:

Предположим, что мы хотим использовать драгоценный камень, называемый pristine_text, из ведущей ветки github

Gemfile:

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

main.rb: (неверно)

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

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

/pristine-text-some_commit_id

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

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

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