如果您省略 :require 选项,默认情况下,Bundler 将尝试使用标准的名称到文件转换规则来请求 gem:
破折号被视为命名空间分隔符和下划线类名分隔符
表示以下gem语句
gem 'net-sftp'
gem 'backup'
gem 'foo_bar'
等价于
gem 'net-sftp', require: 'net/sftp'
gem 'backup', require: 'backup'
gem 'foo_bar', require: 'foo_bar'
如果 gem 作者遵循标准约定,这将很有效。但在某些情况下,由于各种原因,这不会发生。
例如,有一些名为 foo-bar 的 gem,其主文件名是 /foo_bar.rb 甚至是 /foo.rb。在这种情况下,您需要提供 :require 选项来告诉 Bundler 您需要哪个文件。
最后,require: false 用于当您希望 gem 成为捆绑包的一部分,但您不希望 Bundler 默认加载它时使用。
这很有用,例如,延迟加载 gem 以防它仅在某些情况下使用。考虑一个包含重宝石的耙子任务。您不希望您的应用程序在启动时加载它,但它必须是捆绑包的一部分,否则将找不到。
在这种情况下,您传递选项require: false。然后,在您的 rake 任务中,您将像往常一样手动要求它
require 'library'
只有在调用任务时才会加载库,而不是在正常的应用程序执行中。
一个很好的例子是whenever。该库必须是捆绑器的一部分,因为它必须在您部署应用程序时进行捆绑,但它旨在作为命令行脚本运行。因此,您不希望 Bundler 在启动 Rails 应用程序时需要它。
在某些情况下,您使用组而不是 require: false。
另请参阅official Bundler documentation for require。