これを行います:
gem 'whenever', require: false
gemをインストールする必要があるということですか、それとも必要ではないということですか?
これは、gemをインストールすることを意味しますが、Bundlerの起動時にrequireを呼び出さないでください。そのため、手動で呼び出す必要があります
require "whenever"
ライブラリを使用する場合。
あなたがする場合
gem "whenever", require: "whereever"
バンドラーはいつでもgemという名前をダウンロードしますが、
require "whereever"
これは、必要なライブラリの名前がgemの名前と異なる場合によく使用されます。
Gemをインストールするが「必須」ではない場合は、:require => false
を使用します。
だからあなたが与えた例では:gem 'whenever', :require => false
誰かがbundle installを実行すると、gem install whenever
のようにgemがインストールされるたびにインストールします。 rakeタスクを実行してcronジョブを作成するために使用されますが、通常Rails(またはRailsでない場合は他のフレームワーク)アプリケーションからは使用されません。
そのため、コマンドラインから実行する必要があるがコード内で必要のないものには:require => false
を使用できます。
require: false
は、特定のgemを要求しないようにBundler.require
に指示します。gemはrequire 'gem'
を介して明示的に要求する必要があります。
このオプションは、notには影響しません:
bundle install
:gemは関係なくインストールされます
バンドラーによるrequire
検索パスのセットアップ。
Bundlerは、次のいずれかを実行するとパスに物事を追加します。
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'
を実行し、requireパスを設定します。
config/application.rb
は:
Bundler.require(:default, Rails.env)
実際には宝石が必要です。
Gemfile
でGemを指定し、bundle install
を実行するたびに、Bundlerは、このようにrequire 'whenever'
を配置することで、指定したgemをインストールし、そのGemのコードをロードしますRails appを使用すると、ほとんどの場合と同様に、どのGemからでも苦痛なくメソッドを呼び出すことができます。
whenever, faker or capistrano
のようなGemsは、schedule.rb
ファイル内のcronとcapistranoコードを管理するためにdeploy.rb
ファイル内のコードが必要なものではないため、アプリケーションコードでこれらのgemのコードをロードする必要がないため、そして、これらのGemからメソッドを呼び出したい場所ならどこでも、require "whenever"
を置くことで自分で手動でこれらのGemを要求することができます。これらのGemsのGemfileに:require => false
を配置すると、この方法でbundlerはGemをインストールしますが、Gem自体のコードはロードしません。必要に応じて、単に 'whenever'をケースに入れて実行できます。
Gemfileでgemを要求するには、Bundler.require
を呼び出す必要があります。
require: false
を使用して、Bundlerがgemを要求するのを防ぐことができますが、引き続きgemをインストールして維持します。詳細な説明については、 this out を確認してください。