首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候需要rails Gemfile中的要求?

什么时候需要rails Gemfile中的要求?
EN

Stack Overflow用户
提问于 2014-01-09 19:19:24
回答 4查看 2K关注 0票数 11

在我的档案里,我有这样的东西:

代码语言:javascript
复制
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'

在Gemfile中,您需要一个要求吗?我还发现了像:require => false这样的东西。帮助?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-09 19:25:12

如果您省略了:require选项,那么在默认情况下,邦德勒将使用标准的名称到文件转换规则来尝试要求gem:

破折号被认为是命名空间分隔符和下划线类名分隔符。

这意味着以下gem语句

代码语言:javascript
复制
gem 'net-sftp'
gem 'backup'
gem 'foo_bar'

等于

代码语言:javascript
复制
gem 'net-sftp', require: 'net/sftp'
gem 'backup', require: 'backup'
gem 'foo_bar', require: 'foo_bar'

如果创业板作者遵循了标准惯例,这就很好了。但在某些情况下,由于各种原因,这种情况不会发生。

例如,有一些名为foo-bar的宝石,其中主文件名是/foo_bar.rb,甚至是/foo.rb。在本例中,您提供了:require选项,以告诉邦德勒您希望需要哪个文件。

最后,当您希望创业板成为包的一部分时,就会使用require: false,但是默认情况下,您不希望绑定器加载它。

例如,这对于延迟加载创业板是有用的,如果它仅在某些情况下使用。想一想包括沉重宝石在内的耙式任务。您不希望应用程序在引导时加载它,但它必须是包的一部分,否则将找不到它。

在本例中,您传递了选项require: false。然后,在您的rake任务中,您将像往常一样手动地要求它。

代码语言:javascript
复制
require 'library'

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

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

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

也见require

票数 19
EN

Stack Overflow用户

发布于 2014-01-09 19:25:39

如果激活gem所需的文件名不能从gem的名称中推断,则需要一个:require。Ruby约定是针对将gem命名为与您应该使用的"require“语句相同的东西的,但并不是所有的东西都遵循这个约定。

:require => false禁用了绑定程序的自动要求,因此您需要手动使用require 'foo'来使用foo中的代码。这主要是有用的,如果一个宝石是大的或昂贵的激活,并仅在某些情况下使用。

票数 2
EN

Stack Overflow用户

发布于 2014-01-09 19:25:21

如果要要求的库的名称与gem的名称不同,则通常使用这种方法。在您的示例中,它将下载gem 'watu_table_builder',但会调用'table_builder'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21029195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档