[ruby] Gemfile에서 ‘require : false’는 무엇을 의미합니까?

이것을합니까 :

gem 'whenever', require: false

gem을 설치해야하거나 필요하지 않다는 의미입니까?



답변

즉, gem을 설치해야하지만 Bundler를 시작할 때 require를 호출하지 않습니다. 따라서 수동으로 전화해야합니다

require "whenever"

라이브러리를 사용하려는 경우

당신이해야한다면

gem "whenever", require: "whereever"

번 들러는 언제든 이름이 지정된 gem을 다운로드하지만

require "whereever"

필요한 라이브러리 이름이 gem 이름과 다른 경우에 종종 사용됩니다.


답변

:require => falsegem을 설치하길 원하지만 “필수”하지 않을 때 사용 합니다.

그래서 당신이 준 예제에서 :
gem 'whenever', :require => false
누군가 번들을 실행할 때마다 gem이 설치 될 때마다 gem install whenever. 레이크 작업을 실행하여 크론 작업을 생성하는 데 사용될 때마다 일반적으로 레일 (또는 레일이 아닌 경우 다른 프레임 워크) 응용 프로그램 내에서 사용되지는 않습니다.

따라서 :require => false명령 줄에서 실행해야하지만 코드 내에 필요하지 않은 모든 항목에 사용할 수 있습니다.


답변

require: falseBundler.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)

실제로 보석이 필요합니다.


답변

당신이 당신의 보석을 지정할 때마다 Gemfile및 실행 bundle install, 들러 갈 것입니다 당신이 넣어 앱에서이 보석에 대해 지정된 보석 및로드 코드를 설치 require 'whenever'하여 레일 응용 프로그램에 보석의 모든 코드를로드 할이 방법 들러를, 당신은 어떤 방법을 호출 할 수 있습니다 대부분의 시간처럼 고통없이 모든 보석에서.

그러나 같은 보석 whenever, faker or capistrano 은 응용 프로그램 코드에서 필요하지 않은 것으로, schedule.rb 파일 에서 코드로 크론 및 파일의 카리스트 라노 코드를 관리 deploy.rb 하여 배포 레시피를 사용자 정의 할 때마다 필요 하므로 앱 코드에 보석 코드를로드 할 필요가 없습니다. 이 보석에서 어떤 메소드를 호출하고 싶을 때 수동으로 thsese 보석을 요구할 수 있습니다 require "whenever" . 그래서 당신은 :require => false이러한 보석을 위해 Gemfile에 넣습니다 .이 방법으로 번 들러는 그 보석을 설치하지만 그 보석 자체에 대한 코드를로드하지는 않습니다. 필요한 경우 언제라도 ‘언제든지’처럼 넣어서 원할 때마다 할 수 있습니다.


답변

Gemfile에 gem을 요구하려면을 호출해야합니다 Bundler.require.

번 들러가로 gem을 요구하지 않도록 할 수 require: false있지만 gem을 설치하고 유지 관리합니다. 더 자세한 설명은 이것을 확인하십시오 .


답변