这样做。
gem 'whenever', require: false
是指需要安装该宝石,还是指不需要?
这意味着安装宝石,但在你启动Bundler时不调用require。所以你需要手动调用
require "whenever"
如果你想使用该库的话。
如果你要做的是
gem "whenever", require: "whereever"
那么bundler就会在任何时候下载名为gem的东西,但会调用
require "whereever"
如果需要的库的名称与gem的名称不同,通常会使用这种方法。
当你希望宝石被安装但不需要时,你可以使用:require => false
。
所以在你给出的例子中。
gem 'whenever', :require => false
。
当有人运行bundle install时, whenever gem将被安装,就像gem install whenever
一样。 Whenever用于通过运行rake任务来创建cron作业,但通常不会在rails(如果不是rails,则是其他框架)应用程序中使用。
所以你可以使用:require => false
来处理任何你需要从命令行运行但在代码中不需要的东西。
require: false
告诉Bundler.require
不需要该特定的 gem:该 gem 必须通过require 'gem'
明确要求。
这个选项并不*影响。
捆绑安装":无论如何,该宝石都会被安装。
捆绑程序设置的require
搜索路径。
当你做以下任何一项时,Bundler会在路径中添加一些东西。
require bundler/setup
调用。bundle exec
调用的Bundle.setup`。例子
宝石文件
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/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)
这实际上需要宝石。