Какая разница между bundle.setup и bundle.require

Из страницы gemfile man, я узнал, что есть два способа импортировать драгоценные камни, которые вы указали в Gemfile. Параметр bundle.setup будет "добавляет драгоценные камни в путь загрузки Ruby", а bundle.require потребует все драгоценные камни.

Какая разница между этими двумя методами? В каком состоянии я должен использовать один из них?

Ответ 1

Bundler.setup изменяет LOAD_PATH, поэтому вы можете делать что-то вроде require 'some_gem', и они будут работать. Это позволяет вам требовать драгоценные камни "вручную". Перед Bundler, используя Rubygems, вы достигнете такого же эффекта, что и require 'rubygems'.

Bundler.require(:default), с другой стороны, на самом деле требует всех драгоценных камней в Gemfile (при условии, что вы не используете группы, в противном случае это потребуются в указанных группах, если вы предоставляете аргументы). Это сокращение от кучи операторов require 'some_gem'.

См. http://gembundler.com/rationale.html. Обратите внимание, что они говорят, что вам нужно сделать require 'bundler/setup', прежде чем делать Bundler.require, но на практике это обычно не требуется. Я почти никогда не использую Bundler.setup (или require 'bundler/setup), потому что мне нужны все драгоценные камни через Bundler.require).

Ответ 2

Вы должны использовать Bundle.setup, и вы можете использовать Bundle.require.

Основная задача связующего состоит в том, чтобы убедиться, что именно Gems, определенные в Gemfile, становятся видимыми для приложения, то есть все драгоценные камни, упомянутые здесь точно в указанных версиях, но не более. Для этого путь загрузки адаптирован. Это делается с помощью Bundle.setup.

Чтобы действительно использовать драгоценные камни, они должны быть необходимы и, таким образом, загружены в приложение. Это можно сделать вручную, используя несколько операторов require или автоматически для всех драгоценных камней, перечисленных в Gemfile (или только некоторых группах), используя Bundle.require. Это, однако, возможно только после адаптации грузового тракта, как указано выше.

Ответ 3

Bundle.setup не требуется для последней версии пакета. на самом деле, когда вы запускаете Bundler.require, он всегда пытается установить правильный $LOAD_PATH для вас.

нужна только:

require 'bundler' Bundler.require