Ответы:
Это означает, что нужно установить гем, но не вызывать require при запуске Bundler. Так что вам нужно будет позвонить вручную
require "whenever"
если вы хотите использовать библиотеку.
Если бы вы должны были сделать
gem "whenever", require: "whereever"
тогда bundler будет загружать гем, названный в любое время, но будет вызывать
require "whereever"
Это часто используется, если имя требуемой библиотеки отличается от имени драгоценного камня.
:require => false
эти конкретные драгоценные камни и явно require "thegem"
из грабли задачи. Это позволит сэкономить память в основных процессах приложения и времени запуска и т. Д. Однако на производительность приложения не следует влиять, даже если вам требуются эти дополнительные гемы в каждом процессе.
require 'yaml'
, теперь у вас есть YAML
модуль как объект в памяти.
:require => false
а затем в своем коде естьrequire 'library_name_here'
Вы используете, :require => false
когда хотите, чтобы гем был установлен, но не «требуется».
Таким образом , в этом примере вы дали:
gem 'whenever', :require => false
когда кто - то бежит Bundle установить всякий раз , когда камень будет установлен как с gem install whenever
. Всякий раз, когда используется для создания заданий cron путем запуска задачи rake, но обычно не используется из приложения rails (или другой платформы, если не rails).
Таким образом, вы можете использовать :require => false
все, что вам нужно для запуска из командной строки, но не нужно в вашем коде.
require: false
говорит Bundler.require
не требовать этот конкретный драгоценный камень: драгоценный камень должен требоваться явно через require 'gem'
.
Эта опция не влияет на:
bundle install
: драгоценный камень будет установлен независимо
require
установка пути поиска по Bundler.
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
Как объяснено в руководстве по инициализации , шаблон 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)
который на самом деле требует драгоценных камней.
require 'faker
может не использовать правильную версию gem, особенно если вы указываете Gemfile на git ref.
Всякий раз, когда вы указываете Gem в вашем Gemfile
и запускаете bundle install
, bundler будет запускать и устанавливать указанный Gem и загружать код для этого Gem в ваше приложение, устанавливая require 'whenever'
этот способ, чтобы bundler загружал код для всех ваших Gem в ваше приложение Rails, и вы можете вызывать любой метод. из любого драгоценного камня без какой-либо боли, как вы делаете большую часть времени.
но Gems like whenever, faker or capistrano
- это то, что вам не нужно в коде приложения, которое вам нужно всякий раз, когда код в вашем schedule.rb
файле управляет кодами cron и capistrano в deploy.rb
файле для настройки рецепта развертывания, поэтому вам не нужно загружать код для этих драгоценных камней в код вашего приложения и куда бы вы ни шли Если вы хотите вызвать любой метод из этих самоцветов, вы можете вручную запросить эти самоцветы, поставив require "whenever"
. таким образом, вы вставляете :require => false
свой Gemfile для этих Gems, таким образом, упаковщик будет устанавливать этот Gem, но не загружать код для этого самого Gem, вы можете сделать это в любое время, просто вставив в вашем случае команду require 'when'.
Чтобы потребовать драгоценные камни в вашем Gemfile, вам нужно будет позвонить Bundler.require
.
Вы можете запретить сборщику запрашивать драгоценный камень require: false
, но он все равно будет устанавливать и поддерживать драгоценный камень. Проверьте это для более подробного объяснения.
Bundler.require
как я понимаю , делают по умолчанию. Только ответы Сиро и Нешы верны.