Gemfileの「虚偽」は何を必要としますか?
質問
これを行う:
gem 'whenever', require: false
宝石をインストールする必要があることを意味しますか、それとも必須ではないことを意味しますか?
解決
これは、宝石をインストールすることを意味しますが、バンドラーを起動するときに要求を呼び出しないでください。したがって、手動で電話をかける必要があります
require "whenever"
ライブラリを使用する場合。
あなたがするなら
gem "whenever", require: "whereever"
その後、バンドラーはいつでも名前が付けられた宝石をダウンロードしますが、電話をかけるでしょう
require "whereever"
これは、必要なライブラリの名前が宝石の名前とは異なる場合によく使用されます。
他のヒント
あなたが使う :require => false
宝石をインストールしたいが「必須」ではない場合。
だからあなたが与えた例で: gem 'whenever', :require => false
誰かがバンドルを実行したとき、いつでも宝石がインストールされるときはいつでも gem install whenever
. 。レーキタスクを実行してクロンジョブを作成するために使用される場合はいつでも、通常はレール内(またはレールではない場合は他のフレームワーク)アプリケーションから使用されません。
したがって、使用できます :require => false
コマンドラインから実行する必要があるが、コード内では必要ないものは何でも。
require: false
言う Bundler.require
特定の宝石を要求しないでください:宝石は明示的に必要とする必要があります require 'gem'
.
このオプションはそうです いいえ 影響:
bundle install
: :宝石は関係なくインストールされますrequire
バンドラーによるパスセットアップを検索します。バンドラーは、次のいずれかを行うと、道に物事を追加します。
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テンプレートは起動時に実行されます。
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
, 、バンドラーは、特定のgemとそのgem in youのアプリのロードコードを入れてインストールします require 'whenever'
このようにして、バンドラーはRailsアプリのすべての宝石のコードをロードし、ほとんどの場合やるように、痛みのない宝石からどの方法も呼び出すことができます。
しかし、宝石は好きです whenever, faker or capistrano
あなたのアプリコードで必要としないものは、あなたのコードがいつでも必要なものです schedule.rb
CronsとCapistranoコードを管理するファイル deploy.rb
展開レシピをカスタマイズするファイルをファイルアプリコードにこれらの宝石のコードをロードする必要はありません。 require "whenever"
. 。だからあなたは置きます :require => false
これらの宝石のgemfileでは、この方法でバンドラーはその宝石自体のロードコードではなくその宝石をインストールします。あなたの場合はいつでも「いつでも」を必要とするように配置するだけで、いつでもそれを行うことができます。
あなたのgemfileに宝石を要求するには、あなたは電話する必要があります Bundler.require
.
バンドラーが宝石を要求するのを防ぐことができます require: false
, 、しかし、それはまだ宝石をインストールして維持します。小切手 これはアウトです より詳細な説明。