Ответ 1
Это просто гарантирует, что вы загружаете Gemfile определенные драгоценные камни. См. Документ здесь https://bundler.io/v1.12/bundler_setup.html
В почти каждом примере Синатры, который я видел, несмотря на то, что он делает, он всегда имеет следующие две строки:
require 'rubygems'
require 'bundler/setup'
В большинстве примеров удаление "связующего/установочного" требования, по-видимому, не имеет эффекта разрушения, поэтому я смущен тем, когда/где мне нужно включить это.
Я ненавижу использовать вещи, не зная точно, почему он там, поэтому я надеялся, что кто-то сможет объяснить, почему мне нужны обе линии и что они делают?
Это просто гарантирует, что вы загружаете Gemfile определенные драгоценные камни. См. Документ здесь https://bundler.io/v1.12/bundler_setup.html
Существует практическое объяснение:
Предположим, что мы хотим использовать драгоценный камень, называемый 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
Ошибка исчезла, потому что теперь вы загружаете связку с путями загрузки ваших зависимостей.
Настройка Bundle "очищает" путь загрузки, поэтому последующая попытка потребовать что-то, что не находится в Gemfile, приведет к ошибке загрузки.
Понимание того, что происходит
Короче говоря, то, что делает Bundler, удаляет из $LOAD_PATH все, что не определено в Gemfile. $LOAD_PATH (или просто $:) - это глобальная переменная, которая сообщает Ruby, где он должен искать вещи, которые требуются, поэтому, если зависимость не находится в Gemfile, она не будет в $LOAD_PATH, а затем Ruby нет способа найти его.
Покажите мне код
Это файл, который загружается, когда нам требуется "bundler/setup", и здесь важна вызов Bundler.setup. Эта настройка сначала очищает путь загрузки, а затем активирует только драгоценные камни, определенные в Gemfile, что в основном означает добавление их к переменной $LOAD_PATH.
Примечание. Я обновил ссылки "покажи мне код", когда они перешли к мастер-ветке, которая изменилась.