Answers:
这意味着安装gem,但在启动Bundler时不要调用require。因此,您需要手动致电
require "whenever"
如果您想使用该库。
如果你要做
gem "whenever", require: "whereever"
然后捆绑程序会随时下载命名的gem,但会调用
require "whereever"
如果需要的库名称与gem的名称不同,通常使用此方法。
:require => false
这些特殊的宝石明确地require "thegem"
从rake任务中删除。这样可以节省主应用程序进程中的内存和启动时间等。但是,即使您在每个进程中都需要这些其他的gem,也不会影响应用程序的性能。
require 'yaml'
已经将YAML
模块作为对象存储在内存中。
:require => false
,然后在代码中添加require 'library_name_here'
require: false
告诉Bundler.require
您不需要该特定的gem:必须通过显式要求该gem require 'gem'
。
该选项并不会影响:
bundle install
:无论如何,都会安装gem
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'
并设置了所需的路径。
config/application.rb
确实:
Bundler.require(:default, Rails.env)
实际上需要宝石。
require 'faker
可能未使用正确的gem版本,特别是如果您是Gemfile指向git ref。
每当您在Gemfile
运行中指定Gem时 bundle install
,bundler都会通过在您的应用中安装指定的gem并为该Gem加载代码,通过 require 'whenever'
这种方式,bundler将在Rails应用中加载所有Gems的代码,并且您可以调用任何方法像大多数时候一样,从任何宝石中轻松摆脱痛苦。
但是类似Gems whenever, faker or capistrano
的东西在您的应用程序代码中是不需要的,只要schedule.rb
文件中的代码用于管理文件中的Cron和Capistrano代码deploy.rb
以自定义部署配方,就不需要在您的应用程序代码中以及任何地方加载这些gems的代码要调用这些Gems中的任何方法,您可以通过手动手动要求这些宝石 require "whenever"
。因此:require => false
,您为这些Gems 放入了Gemfile,这样,捆绑程序将安装该Gem但不为该Gem本身加载代码,您可以在任何需要的地方进行操作,只需在需要的情况下简单地放入require'whenever'。
为了在您的Gemfile中需要gem,您需要致电Bundler.require
。
您可以使用阻止捆绑程序要求使用gem require: false
,但它仍将安装和维护gem。请查看此内容以获得更详细的说明。
Bundler.require
据我所知,大多数答案(包括已接受的答案)都是关于Rails的,这些默认情况下是默认的。只有Ciro和Nesha的答案是正确的。