我写了一个小宝石,我决定在内部使用与外部不同的名称,即我宝石的名称是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"但如果我必须改变它,那就没关系。这是如何运作的?非常感谢。
答案 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约定。