kdd*_*isz 6 ruby ruby-on-rails bundler gemfile
在我的gemfile中,我有类似的东西:
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'
Run Code Online (Sandbox Code Playgroud)
在Gemfile中你需要一个要求吗?我也找到了类似的东西:require => false.救命?
Sim*_*tti 12
如果省略该:require选项,默认情况下Bundler将尝试使用标准的名称到文件转换规则来要求gem:
破折号被视为命名空间分隔符和下划线类名分隔符
它表示以下gem语句
gem 'net-sftp'
gem 'backup'
gem 'foo_bar'
Run Code Online (Sandbox Code Playgroud)
相当于
gem 'net-sftp', require: 'net/ftp'
gem 'backup', require: 'backup'
gem 'foo_bar', require: 'foo_bar'
Run Code Online (Sandbox Code Playgroud)
如果gem作者遵循标准约定,这很有效.但在某些情况下,由于各种原因,这种情况不会发生.
例如,有些foo-bar主要文件名为/foo_bar.rb或甚至是/foo.rb.在这种情况下,您可以:require选择告诉Bundler您需要哪个文件.
最后,require: false当您希望gem成为bundle的一部分时使用,但是您不希望Bundler默认加载它.
例如,这对于延迟加载gem是有用的,以防它仅在某些情况下使用.考虑一个包含重宝石的rake任务.您不希望应用程序在启动时加载它,但它需要是捆绑包的一部分,否则将无法找到它.
在这种情况下,您传递选项require: false.然后,在您的rake任务中,您将像往常一样手动使用它
require 'library'
Run Code Online (Sandbox Code Playgroud)
只有在调用任务时才会加载库,而不是在正常的应用程序执行中加载.
一个很好的例子是whenever.该库必须是Bundler的一部分,因为它必须在部署应用程序时捆绑,但它应作为命令行脚本运行.因此,在启动Rails应用程序时,您不希望Bundler需要它.
有些情况下您使用组而不是require: false.
另请参阅Bundlerrequire的官方文档.
| 归档时间: |
|
| 查看次数: |
1308 次 |
| 最近记录: |