这样做:
gem 'whenever', require: false
意味着需要安装gem,还是意味着不需要它?
这样做:
gem 'whenever', require: false
意味着需要安装gem,还是意味着不需要它?
当前回答
类比解释
## Gemfile
gem "university_degree", require: false
gem "dealing_with_boss"
"dealing_with_boss" -总是需要的-加载到内存中并准备运行。 学位宝石-不需要. ...但如果需要,则需要在代码中手动要求它。
其他回答
这意味着安装gem,但在启动Bundler时不调用require。因此您需要手动调用
require "whenever"
如果你想去图书馆的话。
如果你要这么做
gem "whenever", require: "whereever"
然后捆绑者将下载宝石命名,但会调用
require "whereever"
如果需要的库的名称与gem的名称不同,则通常使用这种方法。
你使用:require => false当你想要安装宝石,但不是“必需的”。
在你给出的例子中: Gem '无论何时',:require => false 当有人运行bundle install时,无论何时都安装gem,就像安装gem时一样。用于通过运行rake任务来创建cron作业,但通常不从rails(或其他框架,如果不是rails)应用程序中使用。
因此,您可以使用:require => false用于需要从命令行运行但在代码中不需要的任何内容。
为了在你的Gemfile中需要宝石,你需要调用Bundler.require。
你可以用require: false来防止捆绑器要求gem,但是它仍然会安装和维护gem。查看这个来获得更详细的解释。
类比解释
## Gemfile
gem "university_degree", require: false
gem "dealing_with_boss"
"dealing_with_boss" -总是需要的-加载到内存中并准备运行。 学位宝石-不需要. ...但如果需要,则需要在代码中手动要求它。
require: false告诉Bundler。Require不需要特定的宝石:必须通过Require 'gem'明确地需要宝石。
此选项不影响:
Bundle安装:无论如何gem都会被安装 要求搜索路径设置由捆绑。 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使用
正如在初始化教程中所解释的,默认的Rails模板在启动时运行:
配置/ boot.rb 配置/ application.rb
配置/ boot。rb包含:
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
它需要'bundler/setup'并设置require路径。
配置/应用程序。rb:
Bundler.require(:default, Rails.env)
这实际上需要宝石。