回答:
つまり、gemをインストールしますが、Bundlerを起動するときにrequireを呼び出さないでください。したがって、手動で呼び出す必要があります
require "whenever"
ライブラリを使用する場合。
もしあなたがやるなら
gem "whenever", require: "whereever"
次に、バンドラーはいつでもという名前のgemをダウンロードしますが、
require "whereever"
これは、必要なライブラリの名前が宝石の名前と異なる場合によく使用されます。
:require => false
これらの特定のジェムと明示的require "thegem"
にレイクタスクからです。これにより、メインのアプリプロセスや起動時間などのメモリが節約されます。ただし、すべてのプロセスでこれらの追加のgemが必要になった場合でも、アプリのパフォーマンスには影響しません。
require 'yaml'
、YAML
モジュールをメモリ内のオブジェクトとして使用できます。
:require => false
で、コードにrequire 'library_name_here'
:require => false
gemをインストールしたいが「必須」ではない場合に使用します。
したがって、あなたが与えた例では:
gem 'whenever', :require => false
誰かがバンドルを実行するときに、gemがと同じようにインストールされるたびにインストールしgem install whenever
ます。Rakeタスクを実行してcronジョブを作成するために使用されますが、通常はRails(またはRailsでない場合は他のフレームワーク)アプリケーション内からは使用されません。
その: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の使用法
初期化チュートリアルで説明されているように、デフォルトの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がgit refを指している場合は、使用すると正しいgemバージョンが使用されない場合があることに注意してください。
でGemを指定してGemfile
実行すると bundle install
、Bundlerは指定されたGem をインストールし、アプリにそのGemの require 'whenever'
コードをロードします。ほとんどの場合と同じように、どのGemからでも痛みはありません。
しかし、宝石が好きでwhenever, faker or capistrano
、あなたのコードいつでもあなたが必要とするアプリのコードにする必要はありません、何かされschedule.rb
たファイルがでcronsとカピストラーノコードを管理するためにdeploy.rb
、ファイルアプリのコードにこれらの宝石の負荷コードにする必要はありませんので、展開のレシピをカスタマイズすることをしてどここれらの宝石から任意のメソッドを呼び出したい場合は、自分で手動でこれらの宝石を要求できます require "whenever"
。したがって:require => false
、これらの宝石のGemfileを入力すると、この方法でバンドラーはそのGemをインストールしますが、そのGem自体のコードはロードしません。ケースにrequire 'whenever'のように置くだけで、いつでも好きなときにそれを実行できます。
Bundler.require
、私が理解しているようにデフォルトでを行うRailsに関するものです。チロとネシャの答えだけが正しいです。