做这个:
gem 'whenever', require: false
是指宝石需要安装,还是意味着它不是必需的?
#1楼
require: false
告诉Bundler.require
不要求特定的gem:必须通过Bundler.require
require 'gem'
明确require 'gem'
。
此选项不影响:
bundle install
:无论如何都会安装gem由bundler设置的
require
搜索路径。当您执行以下任一操作时,Bundler会向路径添加内容:
-
Bundle.setup
- 由
require bundler/setup
调用 - 这是由
bundle exec
调用的
-
例
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'
并设置require路径。
config/application.rb
:
Bundler.require(:default, Rails.env)
这实际上需要宝石。
#2楼
每当你在你的Gemfile
指定一个Gem并运行bundle install
,bundler就会在你的应用程序中安装指定的gem并加载该Gem的代码,方法是将Gemfile
require 'whenever'
置于你的Rails应用程序中为所有Gems加载代码,你可以在没有任何痛苦的情况下从任何宝石中调用任何方法,就像你大部分时间一样。
但像宝石whenever, faker or capistrano
是你需要的东西,你不要在你的应用程序代码需要每当你的代码schedule.rb
文件管理crons和Capistrano的代码deploy.rb
文件,这样就不需要加载自定义部署食谱在您的应用程序代码中的这些宝石的代码以及您想要从这些宝石中调用任何方法的任何地方,您可以通过将“ require "whenever"
置于require "whenever"
自己手动地要求这些宝石。 所以你在你的Gem文件中为这些Gems添加:require => false
,这样捆绑包就会安装那个Gem而不是为那个Gem本身加载代码,你可以随时在你的情况下像需要'随时'那样做。
#3楼
这意味着安装gem,但在启动Bundler时不要调用require。 所以你需要手动调用
require "whenever"
如果你想使用这个库。
如果你这样做的话
gem "whenever", require: "whereever"
然后捆绑包会下载任何时候命名的宝石,但会打电话
require "whereever"
如果要求的库名称与gem的名称不同,则通常使用此方法。
#4楼
如果希望安装gem而不是“required”,则使用:require => false
。
所以在示例中你给了: gem 'whenever', :require => false
当有人运行bundle install时,无论何时安装gem都会像gem install whenever
。 每当用于通过运行rake任务来创建cron作业,但通常不在rails(或其他框架,如果不是rails)应用程序中使用。
因此,对于需要从命令行运行但在代码中不需要的任何内容,您可以使用:require => false
。
#5楼
为了在Gemfile中需要gems,您需要调用Bundler.require
。
您可以阻止bundler使用require: false
来要求gem,但它仍然会安装和维护gem。 请查看此内容以获取更详细的说明。