做这个:
gem 'whenever', require: false
意味着需要安装gem,还是不需要安装gem?
这意味着安装 gem,但在启动 Bundler 时不要调用 require。所以你需要手动调用
require "whenever"
如果你想使用图书馆。
如果你要做
gem "whenever", require: "whereever"
然后 bundler 会随时下载命名的 gem,但会调用
require "whereever"
如果需要的库名称与 gem 的名称不同,则通常使用此方法。
当您:require => false
希望安装 gem 但不是“必需”时使用。
因此,在您给出的示例中:
gem 'whenever', :require => false
当有人运行 bundle install 时,将像使用gem install whenever
. When 用于通过运行 rake 任务来创建 cron 作业,但通常不在 rails(或其他框架,如果不是 rails)应用程序中使用。
因此,您可以使用:require => false
任何需要从命令行运行但在代码中不需要的东西。
require: false
告诉Bundler.require
不要求特定的宝石:必须通过明确要求宝石require 'gem'
。
此选项不影响:
bundle install
:无论如何都会安装gem
捆绑器设置的require
搜索路径。
当您执行以下任一操作时,Bundler 会将内容添加到路径中:
Bundle.setup
require bundler/setup
bundle exec
例子
宝石文件
source 'https://rubygems.org'
gem 'haml'
gem 'faker', require: false
主文件
# 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)
这实际上需要宝石。
每当您在Gemfile
and run中指定一个 Gem 时 bundle install
,bundler 将去安装指定的 gem 并在您的应用程序中加载该 Gem 的代码, require 'whenever'
这样 bundler 将在您的 Rails 应用程序中加载所有 Gems 的代码,并且您可以调用任何方法任何宝石都没有任何痛苦,就像你大部分时间一样。
但是像 Gems 这样whenever, faker or capistrano
的东西是您的应用程序代码中不需要的东西,只要文件中的代码schedule.rb
用于管理文件中的 crons 和 capistrano 代码deploy.rb
以自定义部署配方,因此您无需在应用程序代码中以及在任何地方加载这些 gems 的代码想要从这些 Gems 中调用任何方法,您可以通过 put 手动要求这些 Gems require "whenever"
。因此,您将:require => false
Gemfile 放入这些 Gem,这样捆绑程序将安装该 Gem,但不会加载该 Gem 本身的代码,您可以随时通过简单地在您的情况下输入 like require 'whenever' 来执行此操作。
为了在您的 Gemfile 中要求 gems,您需要调用Bundler.require
.
您可以使用 来阻止捆绑程序要求 gem require: false
,但它仍会安装和维护 gem。查看此内容以获得更详细的说明。
## Gemfile
gem "university_degree", require: false
gem "dealing_with_boss"
“ dealing_with_boss
” - 总是需要 - 加载到内存中并准备就绪。
我很少需要学位宝石。只有当我与招聘人员交谈时。所以我手动操作require
它,突然之间像“Black Scholes-Merton”和“heteroskadasticity”这样的花哨的词立即被加载到内存中;我告诉招聘人员我可以进行复杂的排序算法:例如,三种不同语言的“冒泡排序”:Javascript、EcmaScript 和 ES16——看看我有多聪明——这通常足以让我与其他人交谈。