做这个:

gem 'whenever', require: false

意味着需要安装宝石,还是意味着不需要它?

有帮助吗?

解决方案

这意味着要安装宝石,但是当您启动Bundler时,请勿呼叫。因此,您需要手动致电

require "whenever"

如果要使用库。

如果你要做

gem "whenever", require: "whereever"

然后,邦德勒会随时下载命名的宝石,但会打电话给

require "whereever"

如果需要的库名称与宝石的名称不同,通常会使用这种情况。

其他提示

你用 :require => false 当您希望将宝石安装而不是“必需”时。

因此,在您给的示例中: gem 'whenever', :require => false 当某人运行捆绑包时,每当将GEM安装安装时 gem install whenever. 。每当用来通过运行Rake任务来创建CRON作业,但通常不会在Rails(或其他框架)应用程序中使用。

所以你可以使用 :require => false 对于您需要从命令行运行的任何内容,但在代码中不需要。

require: false 告诉 Bundler.require 不需要特定的宝石:必须明确要求通过 require 'gem'.

此选项可以 不是 影响:

  • bundle install: :宝石将被安装

  • 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上 让您玩它。

铁轨使用

如在 初始化教程, ,默认导轨模板在启动时运行:

  • 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, ,Bundler将通过放置在您的应用中安装该宝石的指定的GEM和加载代码 require 'whenever' 这样一来,邦德勒将在铁轨应用中加载所有宝石的代码,您可以像大多数时候一样从任何宝石中调用任何方法。

但是宝石喜欢 whenever, faker or capistrano 您在应用程序代码中不需要的东西是您所需的 schedule.rb 文件以管理Crons和Capistrano代码 deploy.rb 要自定义部署食谱的文件,因此您不必在应用程序代码中加载这些宝石的代码,无论您想从这些宝石中调用任何方法,都可以通过放置可以手动需要Thsese Gems require "whenever" . 。所以你放了 :require => false 在这些宝石的Gemfile中,Bundler将安装该宝石,但不能为该宝石本身加载代码,您可以在您想要的情况下只需在您的情况下按照“ whice whee whee”而做到这一点。

为了在您的Gemfile中需要宝石,您需要致电 Bundler.require.

您可以防止Bundler与 require: false, ,但它仍然会安装和维护宝石。查看 这个 有关更详细的解释。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top