Gemfile에서 'require : false'는 무엇을 의미합니까?


429

이것을합니까 :

gem 'whenever', require: false

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


1
대부분의 답변 (허용 된 답변 포함)은 Bundler.require내가 이해하는 것처럼 기본적으로 수행하는 Rails에 관한 것입니다. Ciro와 Nesha의 답변 만이 정확합니다.
Nakilon

답변:


472

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

require "whenever"

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

당신이해야한다면

gem "whenever", require: "whereever"

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

require "whereever"

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


112
@VenkatD. 때로는 특정 보석을 설치하고 싶지만 모든 프로세스에 보석을로드하고 싶지는 않습니다. 나는 정기적 인 추가 기능을 통해 Heroku에서 주기적으로 호출하려는 특정 갈퀴 작업이 있습니다. 이 특정 갈퀴 작업에는 나머지 응용 프로그램에 필요하지 않은 특정 보석이 필요합니다. 그래서 나는 :require => false이 특별한 보석과 require "thegem"갈퀴 작업에서 명시 적으로 . 그러면 기본 앱 프로세스 및 시작 시간 등의 메모리가 절약됩니다. 그러나 모든 프로세스에서 이러한 추가 젬이 필요한 경우에도 앱 성능에 영향을 미치지 않아야합니다.
Michael van Rooijen

5
@MichaelvanRooijen-그러나 중요한 점 : "그러나 모든 프로세스에서 이러한 추가 젬이 필요한 경우에도 앱 성능에 영향을 미치지 않아야합니다." 나는 그것이 사실이라고 생각하지 않습니다. confreaks.com/videos/2668-gogaruco2013-measuring-ruby
Nathan Long

1
@MichaelvanRooijen-실제로는 라이브러리를 사용하지 않으면 일반적으로 중요하지 않습니다. 그러나 gem이 필요하면 최소한 기본 파일을 lib에로드해야하며 아마도 자체 파일이 더 필요할 수도 있습니다. 하더라도 require 'yaml'이제 YAML메모리에 객체로 모듈이 있습니다.
Nathan Long

2
set을 false로 설정하고 라이브러리 이름이 gem 이름과 다른 경우 어떻게해야합니까?
Peter-Jan Celis

2
@ Peter-JanCelis이 경우, 방금 설정 :require => false한 다음 코드에require 'library_name_here'
Rob Di Marco

73

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

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

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


6
요청의 작은 하위 집합에만 사용하는 gem에도 사용할 수 있습니다.
Nathan Long

61

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)

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


사용주의 require 'faker자식 심판에 올바른 보석 버전을 사용하지 않을 수도 특별히 경우있는 거 Gemfile 점을.
dazonic

@dazonic은 Haml이 예제에서 다른가요?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

9

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

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


2

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.