Ruby on rails 什么时候需要rails文件中的require?
在我的GEM文件中,我有如下内容: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 '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
中的代码。这主要适用于大型或昂贵的宝石激活,并且仅在某些情况下使用。请参阅:谢谢!这是一个非常详细的答案。非常感谢您的努力。