require: false
говорит Bundler.require
не требовать этого конкретного драгоценного камня: драгоценный камень должен требоваться явно через require 'gem'
.
Эта опция не влияет:
bundle install
: камень будет установлен независимо от
require
настройка пути поиска по пакетам.
Bundler добавляет вещи на путь, когда вы делаете одно из:
Bundle.setup
- который называется
require bundler/setup
- который называется
bundle exec
Пример
Gemfile
source 'https://rubygems.org'
gem 'haml'
gem 'faker', require: false
main.rb
# Fail because we haven't done Bundler.require yet.
# bundle exec does not automatically require anything for us,
# it only puts them in the require path.
begin Haml; rescue NameError; else raise; end
begin Faker; rescue NameError; else raise; end
# The Bundler object is automatically required on `bundle exec`.
Bundler.require
Haml
# Not required because of the require: false on the Gemfile.
# THIS is what `require: false` does.
begin Faker; rescue NameError; else raise; end
# Faker is in the path because Bundle.setup is done automatically
# when we use `bundle exec`. This is not affected by `require: false`.
require 'faker'
Faker
Тогда следующее не вызовет исключения:
bundle install --path=.bundle
bundle exec ruby main.rb
На GitHub для вас, чтобы играть с ним.
Использование рельсов
Как объяснено в руководстве по инициализации , шаблон Rails по умолчанию запускается при запуске:
config/boot.rb
config/application.rb
config/boot.rb
содержит:
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
, который выполняет require 'bundler/setup'
и устанавливает требуемый путь.
config/application.rb
делает:
Bundler.require(:default, Rails.env)
, что на самом деле требует драгоценных камней.