次のファイル構造に基づいて構築されたカスタムgemがあります。
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 = 'x@x.com'
s.files = ["lib/searchcommon.rb","lib/commonfiles/scommon.rb","lib/commonfiles/rbbi.rb","lib/commonfiles/token_stream.rb"]
end
問題なくgemをビルドしてインストールできます。
irbでも機能します。
>> require 'searchcommon'
=> true
しかし、私はこの宝石を必要とするスクリプトを持っています。スクリプトには、次のようにgemが含まれています。
#!/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
誤った行は、lib / commonfiles/searchcommon.rb内の「require'commonfiles/rbbi'」です。
このエラーが発生するrbbi.rb内の行は、同じフォルダーにも存在する「require'scommon'」です。
IRBでgemをうまく使用できるのに、なぜこれがスクリプトで機能しないのか理解できません。
私はSOでこの質問を見ましたが、同じ問題を完全に修正することはできませんでした。
どんな助けでもいただければ幸いです。
編集:いくつかの紛らわしいファイル名を削除し、それらを置き換えました。