У меня есть собственный драгоценный камень, который построен на следующей структуре файлов:
something/common/searchcommon.gemspec
something/common/lib/searchcommon.rb
something/common/lib/commonfiles/scommon.rb
something/common/lib/commonfiles/token_stream.rb
something/common/lib/commonfiles/rbbi.rb
Мой файл gemspec выглядит так:
Gem::Specification.new do |s|
s.name = 'searchcommon'
s.version = '0.0.0'
s.date = '2012-04-28'
s.summary = "Search Common classes"
s.description = "Contains the common classes for search"
s.authors = ["some author"]
s.email = '[email protected]'
s.files = ["lib/searchcommon.rb","lib/commonfiles/scommon.rb","lib/commonfiles/rbbi.rb","lib/commonfiles/token_stream.rb"]
end
Я могу собрать и установить драгоценный камень без проблем.
Это также работает на irb:
>> require 'searchcommon'
=> true
Однако у меня есть скрипт, которому понадобится этот драгоценный камень. Сценарий включает в себя драгоценный камень следующим образом:
#!/usr/local/bin/ruby
require 'rubygems'
require 'searchcommon'
Ошибка, которую я получаю, выдает следующую трассировку стека:
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- scommon (LoadError)
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/local/lib/ruby/gems/1.8/gems/searchcommon-0.0.0/lib/commonfiles/rbbi.rb:1
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/local/lib/ruby/gems/1.8/gems/searchcommon-0.0.0/lib/searchcommon.rb:1
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60:in `gem_original_require'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60:in `require'
from ./mapper.rb:3
Ошибочная строка — это "require 'commonfiles/rbbi'" внутри lib/commonfiles/searchcommon.rb.
Строка внутри rbbi.rb с этой ошибкой называется "require 'scommon'", которая также присутствует в той же папке.
Я не могу понять, почему это не сработает в сценарии, когда я могу прекрасно использовать драгоценный камень с IRB.
Я просмотрел этот вопрос на SO, но это не так вполне решить ту же проблему.
Любая помощь будет оценена по достоинству.
Редактировать: удалены и заменены некоторые запутанные имена файлов.
searchcommon
в сценарии иsearch_common
в ошибке. Так что это? - person Michael Slade   schedule 23.05.2012