답변:
즉, gem을 설치해야하지만 Bundler를 시작할 때 require를 호출하지 않습니다. 따라서 수동으로 전화해야합니다
require "whenever"
라이브러리를 사용하려는 경우
당신이해야한다면
gem "whenever", require: "whereever"
번 들러는 언제든 이름이 지정된 gem을 다운로드하지만
require "whereever"
필요한 라이브러리 이름이 gem 이름과 다른 경우에 종종 사용됩니다.
:require => false
이 특별한 보석과 require "thegem"
갈퀴 작업에서 명시 적으로 . 그러면 기본 앱 프로세스 및 시작 시간 등의 메모리가 절약됩니다. 그러나 모든 프로세스에서 이러한 추가 젬이 필요한 경우에도 앱 성능에 영향을 미치지 않아야합니다.
require 'yaml'
이제 YAML
메모리에 객체로 모듈이 있습니다.
:require => false
한 다음 코드에require 'library_name_here'
:require => false
gem을 설치하길 원하지만 "필수"하지 않을 때 사용 합니다.
그래서 당신이 준 예제에서 :
gem 'whenever', :require => false
누군가 번들을 실행할 때마다 gem이 설치 될 때마다 gem install whenever
. 레이크 작업을 실행하여 크론 작업을 생성하는 데 사용될 때마다 일반적으로 레일 (또는 레일이 아닌 경우 다른 프레임 워크) 응용 프로그램 내에서 사용되지는 않습니다.
따라서 :require => false
명령 줄에서 실행해야하지만 코드 내에 필요하지 않은 모든 항목에 사용할 수 있습니다.
require: false
Bundler.require
특정 보석을 요구하지 않도록 지시 합니다. 보석은을 통해 명시 적으로 요구되어야합니다 require 'gem'
.
이 옵션은 영향을 미치지 않습니다 :
bundle install
: 보석은 상관없이 설치됩니다
번 require
들러에 의한 검색 경로 설정
번 들러는 다음 중 하나를 수행 할 때 경로에 항목을 추가합니다.
Bundle.setup
require bundler/setup
bundle exec
예
젬 파일
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)
실제로 보석이 필요합니다.
require 'faker
자식 심판에 올바른 보석 버전을 사용하지 않을 수도 특별히 경우있는 거 Gemfile 점을.
당신이 당신의 보석을 지정할 때마다 Gemfile
및 실행 bundle install
, 들러 갈 것입니다 당신이 넣어 앱에서이 보석에 대해 지정된 보석 및로드 코드를 설치 require 'whenever'
하여 레일 응용 프로그램에 보석의 모든 코드를로드 할이 방법 들러를, 당신은 어떤 방법을 호출 할 수 있습니다 대부분의 시간처럼 고통없이 모든 보석에서.
그러나 같은 보석 whenever, faker or capistrano
은 응용 프로그램 코드에서 필요하지 않은 것으로, schedule.rb
파일 에서 코드로 크론 및 파일의 카리스트 라노 코드를 관리 deploy.rb
하여 배포 레시피를 사용자 정의 할 때마다 필요 하므로 앱 코드에 보석 코드를로드 할 필요가 없습니다. 이 보석에서 어떤 메소드를 호출하고 싶을 때 수동으로 thsese 보석을 요구할 수 있습니다 require "whenever"
. 그래서 당신은 :require => false
이러한 보석을 위해 Gemfile에 넣습니다 .이 방법으로 번 들러는 그 보석을 설치하지만 그 보석 자체에 대한 코드를로드하지는 않습니다. 필요한 경우 언제라도 '언제든지'처럼 넣어서 원할 때마다 할 수 있습니다.
Bundler.require
내가 이해하는 것처럼 기본적으로 수행하는 Rails에 관한 것입니다. Ciro와 Nesha의 답변 만이 정확합니다.