要求宝石内部使用不同的名称

时间:2014-03-18 16:44:20

标签: ruby rubygems bundler

我写了一个小宝石,我决定在内部使用与外部不同的名称,即我宝石的名称是google-search,但文件结构是

google-search
  |-lib
    |-google
      |-search
      |-search.rb

使用pry加载我的代码我只是做

bundle exec pry -r ./lib/google/search

来自google-search目录。

我现在已经在我的项目中加入了我的新宝石,并且我试图要求并使用它,但由于某些原因我无法做到。

我试过了:

[1] pry(main)> require 'google/search'
=> false
[2] pry(main)> require 'google'
LoadError: cannot load such file -- google
from (pry):7:in `require'
[3] pry(main)> require 'google-search'
LoadError: cannot load such file -- google-search
from (pry):8:in `require'

我应该更改内部结构还是我必须做其他事情?我非常喜欢require" google / search"但如果我必须改变它,那就没关系。这是如何运作的?非常感谢。

1 个答案:

答案 0 :(得分:0)

require 'google/search'对您的宝石来说是正确的

false的返回值意味着Ruby找到了您的gem库文件google/search.rb,但已经解析并加载了它。仅当尚未加载库时,它才会返回true

参考:http://www.ruby-doc.org/core-2.1.1/Kernel.html#method-i-require

有可能需要找到一个有冲突的文件 - 理论上可以加载匹配google/search.rb的宝石搜索路径中的任何内容,除了.../gemname/lib之外,宝石名称本身不相关搜索路径。宝石可以相互声明文件名,这可以推动诸如将主库文件命名为与gem相同的约定,但只要从另一个中合理地直接和/或唯一地派生,就应该没问题。不同的名字。

对于名为google-search的gem,the advice on Rubygems表示用户应该期望根据需要使用require,因此您遵循正常的Ruby约定。