Ruby on rails 什么时候需要rails文件中的require?

Ruby on rails 什么时候需要rails文件中的require?,ruby-on-rails,ruby,bundler,gemfile,Ruby On Rails,Ruby,Bundler,Gemfile,在我的GEM文件中,我有如下内容: gem 'net-sftp', '2.1.1', :require => 'net/sftp' gem 'backup', '3.0.27' gem 'watu_table_builder', :require => 'table_builder' gem 'browser', '0.1.6' 在GEM文件中,您需要一个require吗?我还发现了类似于:require=>false的东西。帮助?如果省略:require选项,默认情况下,捆绑程序

在我的GEM文件中,我有如下内容:

gem 'net-sftp', '2.1.1', :require => 'net/sftp'
gem 'backup', '3.0.27'
gem 'watu_table_builder', :require => 'table_builder'
gem 'browser', '0.1.6'

在GEM文件中,您需要一个require吗?我还发现了类似于
:require=>false的东西。帮助?

如果省略
:require
选项,默认情况下,捆绑程序将尝试使用标准名称到文件转换规则来请求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作者遵循了标准约定,那么这种方法很有效。但在某些情况下,由于各种原因,这种情况不会发生

例如,有名为
foobar
的gems,其中主文件名是
/foobar.rb
甚至是
/foo.rb
。在这种情况下,您提供了
:require
选项来告诉Bundler您需要哪个文件

最后,当您希望gem成为bundle的一部分,但不希望Bundler在默认情况下加载它时,将使用
require:false

例如,如果只在某些情况下使用gem,那么延迟加载gem非常有用。考虑一个包含重宝石的rake任务。您不希望应用程序在启动时加载它,但它必须是捆绑包的一部分,否则将找不到它

在这种情况下,传递选项
require:false
。然后,在rake任务中,您将像往常一样手动要求它

require 'library'
只有在调用任务时才会加载库,而不是在正常的应用程序执行中

一个很好的例子是。该库必须是捆绑程序的一部分,因为在部署应用程序时必须将其捆绑,但它打算作为命令行脚本运行。因此,您不希望Bundler在Rails应用程序启动时需要它

在某些情况下,您使用组而不是
require:false


另请参见。

如果所需库的名称与gem的名称不同,则通常使用此选项。在您的情况下,它将下载
gem'watu_table_builder'
,但将调用
'table_builder'
require
指定需要此特定gem时需要的其他文件

文件说

每个gem可以指定通过自动请求时应使用的文件 Bundler.require。您可以传递包含多个文件的数组,也可以传递false 防止自动获取任何文件


如果无法从gem的名称推断出激活gem所需的文件名,请参阅完整文档

您需要一个
:require
。Ruby约定是,但并不是所有东西都遵循约定


:require=>false
禁用Bundler的自动requirement,因此您需要手动使用
require'foo'
来使用
foo
中的代码。这主要适用于大型或昂贵的宝石激活,并且仅在某些情况下使用。

请参阅:谢谢!这是一个非常详细的答案。非常感谢您的努力。