2012-07-16 128 views
5

我有一個自定義寶石,我遇到了一個真正奇怪的LoadError,當我把它作爲寶石安裝並試圖要求它在irb中。自定義紅寶石寶石上的奇怪LoadError

一切工作正常與我的rspec測試項目文件夾內。這隻在將它用作irb中的實際寶石時纔會發生。

它引發LoadError異常的文件(/lib/mws/api/order_response.rb)確實存在。我嘗試重命名文件並更新需要它的文件(/lib/mws.rb)。我試過重新創建文件,因爲可能存在權限問題。什麼都沒有

如果我註釋掉那個特定文件的require行,一切正常。沒有什麼特別的文件。還有4個其他文件幾乎完全相同(*_response.rb)。

我覺得我正在服用瘋狂的藥丸。我必須忽略某些東西,但我一定不會看到它。

跟蹤:

[email protected]:~$ irb 
1.9.3p194 :001 > require 'mws' 
LoadError: cannot load such file -- mws/api/order_response 
    from /Users/chris/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /Users/chris/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /Users/chris/.rvm/gems/ruby-1.9.3-p194/gems/mws-0.1.18/lib/mws.rb:14:in `<top (required)>' 
    from /Users/chris/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require' 
    from /Users/chris/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require' 
    from /Users/chris/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
    from (irb):1 
    from /Users/chris/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>' 

文件與要求(/lib/mws.rb

require 'mws/base' 
require 'mws/connection' 
require 'mws/utility' 

require 'mws/api/seller' 
require 'mws/api/product' 
require 'mws/api/order' 
require 'mws/api/report' 

require 'mws/api/general_response' 
require 'mws/api/product_response' 
require 'mws/api/report_response' 
require 'mws/api/seller_response' 
require 'mws/api/order_response' # <--- the offending line 

module MWS 
    # @see Base#initialize MWS::Base for instantiation details. 
    # @return [Base] returns MWS::Base object. 
    def self.new(merchant_id, access_key, secret_key) 
    MWS::Base.new(merchant_id, access_key, secret_key) 
    end 
end 

# The below is for documentation generation purposes. 

# MWS is a wrapper for the Amazon Marketplace Web Service (MWS) API. 
module MWS 
    # API handles all the Amazon MWS API specific stuff. 
    module API 
    end 
    # Utilities contains various functions needed throughout MWS. Utilities is a mixin to multiple classes. 
    module Utilities 
    end 
end 

文件,我需要(/lib/mws/api/order_response.rb):

module MWS 
    module API 

    # Class for parsing Amazon's XML responses into managable objects. 
    class OrderResponse 

     # Include GeneralResponse instance methods as class methods 
     extend GeneralResponse 

    end 
    end 
end 

我的文件結構

enter image description here

回答

2

能應檢查/Users/chris/.rvm/gems/ruby-1.9.3-p194/gems/mws-0.1.18/lib/mws/api,如果該文件位於那裏(而沒有模糊的權限)。

如果不是這種情況,您可能忘記將它添加到您的gemspec中。

如果它在那裏,請嘗試以絕對路徑來請求/加載它(用於調試目的)。

+0

這幾乎是答案,但我詳細說明了爲什麼在下面:http://stackoverflow.com/questions/11499140/weird-loaderror-on-custom-ruby-gem/11820819#11820819 – 2012-08-05 23:03:51

4

對於任何有興趣的人,我使用珠寶商來處理這個寶石。事實證明,珠寶商在構建gemspec時使用你的Git倉庫。

如果您尚未將所有必需的文件添加到您的git存儲庫,則在生成新的gemspec文件時,珠寶商的gemspec rake任務將不包括它們。

+2

哇。這個答案今天幫助了我很多。我以爲我瘋了或什麼。 :) – oesgalha 2014-02-10 12:53:09

+0

很高興我能幫忙。它也給我一個循環。 – 2014-03-02 22:15:56