Відповіді:
Це означає встановити дорогоцінний камінь, але не вимагайте дзвінків, коли ви запускаєте 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
коли хтось запускає пакет, встановлюйте щоразу, коли дорогоцінний камінь буде встановлений, як з gem install whenever
. Кожен раз, коли використовується для створення завдань cron, виконуючи завдання граблі, але, як правило, не використовується з-за додатків рейки (або іншого, якщо не рейки).
Таким чином, ви можете використовувати :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 вам пограти.
Використання рейок
Як пояснено в посібнику з ініціалізацією , шаблон запуску за замовчуванням працює при запуску:
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
можливо не використовувати правильну версію дорогоцінного каменю, особливо якщо ви Gemfile вказуєте на git ref.
Кожного разу, коли ви вкажете Gem у вашому Gemfile
запуску та запустіть bundle install
, bundler запустить і встановить вказаний дорогоцінний камінь та код завантаження для цього Gem у вашій програмі, поставивши require 'whenever'
таким чином постачальник завантажуючи код для всіх ваших самоцвітів у вашому додатку Rails, і ви можете зателефонувати будь-яким методом з будь-якого Самоцвіту без будь-якого болю, як ви робите більшу частину часу.
але дорогоцінні камені - whenever, faker or capistrano
це те, що вам не потрібно в коді додатка, який вам потрібно, коли код у вашому schedule.rb
файлі керує коронками та кодом capistrano у deploy.rb
файлі, щоб налаштувати рецепт розгортання, тому вам не потрібно завантажувати код для цих дорогоцінних каменів у код програми та де б ви не знаходилися Хочете зателефонувати з будь-якого методу з цих дорогоцінних каменів, ви можете вручну зажадати самих цих дорогоцінних каменів, поставивши require "whenever"
. Таким чином, ви :require => false
вкладете у свій Gemfile для цих дорогоцінних каменів, таким чином постачальник встановить цей Gem, але не завантажить код для цього самого Gem, ви можете це робити коли завгодно, просто поставивши у своєму випадку так, як вимагають "коли".
Для того, щоб вимагати дорогоцінні камені у вашому Gemfile, вам потрібно буде зателефонувати Bundler.require
.
Ви можете не допустити, щоб постачальник вимагав дорогоцінного каменя require: false
, але він все одно буде встановлювати та підтримувати дорогоцінний камінь. Перевірте це для більш детального пояснення.
Bundler.require
за замовчуванням, як я розумію. Правильні лише відповіді Кіро та Неші.