在Gemfile中“需要:false”是什么意思?
题
做这个:
gem 'whenever', require: false
意味着需要安装宝石,还是意味着不需要它?
解决方案
这意味着要安装宝石,但是当您启动Bundler时,请勿呼叫。因此,您需要手动致电
require "whenever"
如果要使用库。
如果你要做
gem "whenever", require: "whereever"
然后,邦德勒会随时下载命名的宝石,但会打电话给
require "whereever"
如果需要的库名称与宝石的名称不同,通常会使用这种情况。
其他提示
你用 :require => false
当您希望将宝石安装而不是“必需”时。
因此,在您给的示例中: gem 'whenever', :require => false
当某人运行捆绑包时,每当将GEM安装安装时 gem install whenever
. 。每当用来通过运行Rake任务来创建CRON作业,但通常不会在Rails(或其他框架)应用程序中使用。
所以你可以使用 :require => false
对于您需要从命令行运行的任何内容,但在代码中不需要。
require: false
告诉 Bundler.require
不需要特定的宝石:必须明确要求通过 require 'gem'
.
此选项可以 不是 影响:
bundle install
: :宝石将被安装这
require
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上 让您玩它。
铁轨使用
如在 初始化教程, ,默认导轨模板在启动时运行:
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
并运行 bundle install
, ,Bundler将通过放置在您的应用中安装该宝石的指定的GEM和加载代码 require 'whenever'
这样一来,邦德勒将在铁轨应用中加载所有宝石的代码,您可以像大多数时候一样从任何宝石中调用任何方法。
但是宝石喜欢 whenever, faker or capistrano
您在应用程序代码中不需要的东西是您所需的 schedule.rb
文件以管理Crons和Capistrano代码 deploy.rb
要自定义部署食谱的文件,因此您不必在应用程序代码中加载这些宝石的代码,无论您想从这些宝石中调用任何方法,都可以通过放置可以手动需要Thsese Gems require "whenever"
. 。所以你放了 :require => false
在这些宝石的Gemfile中,Bundler将安装该宝石,但不能为该宝石本身加载代码,您可以在您想要的情况下只需在您的情况下按照“ whice whee whee”而做到这一点。
为了在您的Gemfile中需要宝石,您需要致电 Bundler.require
.
您可以防止Bundler与 require: false
, ,但它仍然会安装和维护宝石。查看 这个 有关更详细的解释。