463

これを行います:

gem 'whenever', require: false

gem をインストールする必要があるということですか、それとも必要ないということですか?

4

6 に答える 6

499

これは、gemをインストールすることを意味しますが、Bundlerを起動するときにrequireを呼び出さないでください。したがって、手動で呼び出す必要があります

require "whenever"

ライブラリを使用したい場合。

あなたがするなら

gem "whenever", require: "whereever"

その後、バンドラーはいつでも名前の付いた宝石をダウンロードしますが、

require "whereever"

これは、必要なライブラリの名前がgemの名前と異なる場合によく使用されます。

于 2011-01-26T01:51:03.653 に答える
81

:require => falsegem をインストールしたいが「必須」ではない場合に使用します。

したがって、あなたが示した例では gem 'whenever', :require => false 、誰かが bundle install を実行すると、常に gem が のようにインストールされgem install wheneverます。rake タスクを実行して cron ジョブを作成するために使用されますが、通常、Rails (または Rails でない場合は他のフレームワーク) アプリケーション内からは使用されません。

:require => falseそのため、コマンド ラインから実行する必要があるものの、コード内では必要ないものには何でも使用できます。

于 2011-01-26T02:55:53.857 に答える
70

require: falseBundler.requireは、その特定の gem を要求しないように指示します。gem は、 を介して明示的に要求する必要がありますrequire 'gem'

このオプションは、以下には影響しません。

  • 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'により、必要なパスが設定されます。

config/application.rbする:

Bundler.require(:default, Rails.env)

実際には宝石が必要です。

于 2014-01-10T13:45:57.040 に答える
2

Gemfile で gem を要求するには、 を呼び出す必要がありますBundler.require

を使用して、バンドラーが gem を要求するのを防ぐことができますがrequire: false、それでも gem をインストールして維持します。詳しい説明はこちらをご覧ください

于 2018-03-09T15:30:10.730 に答える