2012-05-23 37 views
2

我有是建立在文件的下列結構的定製的寶石:定製的寶石作品在IRB,而不是在一個Ruby腳本

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 

我能夠毫無問題地構建和安裝gem。

它也適用於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 

的錯誤路線是「規定‘commonfiles/rbbi’」內lib/commonfiles/searchcommon.rb

rbbi.rb裏面有這個錯誤的行是「require」scommon'「它也存在於同一個文件夾中。

我無法理解爲什麼在腳本中無法正常工作,因爲我可以在IRB中使用gem。

我看過this question on SO,但它並沒有完全解決同樣的問題。

任何幫助,將不勝感激。

編輯:刪除了一些令人困惑的文件名並將其替換。

+0

您在腳本中有'searchcommon',錯誤中有'search_common'。那它是哪一個? –

+0

'searchcommon'是寶石的名稱。 'search_common'是由'rbbi.rb'等文件使用的內部庫文件。 – Nikhil

+0

更改文件名以防止混淆。 – Nikhil

回答

3

您正在嘗試加載scommon,但該文件不在加載路徑中。您可以使用'完整'路徑:require 'commenfiles/scommon'

請注意,發生這種情況是因爲文件的目錄不是加載路徑的一部分。我建議使用require_relative代替(它不使用加載路徑):require_relative 'scommon'

+0

謝謝你!這解決了它。我在每個地方都使用'完整'路徑。我爲require_relative得到了'缺少方法'錯誤,但是我懷疑這是因爲我在使用紅寶石1.8.7。再次感謝。 – Nikhil

+0

是的,require_relative是> = 1.9.2 –

相關問題