5

カスタム gem があり、それを gem としてインストールして irb で要求しようとすると、本当に奇妙な LoadError が発生します。

プロジェクト フォルダー内の rspec テストでは、すべて正常に動作します。これは、irb で実際の gem として使用する場合にのみ発生します。

( ) で LoadError 例外をスローするファイル/lib/mws/api/order_response.rbは実際に存在します。ファイルの名前を変更し、それを必要とするファイルを更新しようとしました ( /lib/mws.rb)。おそらく権限の問題があったと考えて、ファイルを再作成しようとしました。何も機能しません。

その特定のファイルの require 行をコメントアウトすると、すべてが機能します。ファイルについて特別なことは何もありません。ほぼ同じファイルが他に 4 つあります ( *_response.rb)。

狂った薬を飲んでいるような気がします。私は何かを見落としているに違いありませんが、確かに見えません。

痕跡:

chris@Samus:~$ 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

そして私のファイル構造

ここに画像の説明を入力

4

2 に答える 2

4

興味のある方のために説明すると、私は Jeweler を使用してこの宝石の作成を処理していました。結局のところ、Jeweler は gemspec を構築するときに Git リポジトリを使用します。

必要なすべてのファイルを git リポジトリに追加していない場合、Jeweler の gemspec rake タスクは、新しい gemspec ファイルを生成するときにそれらを含めません。

于 2012-08-05T23:03:12.463 に答える
2

ファイルがそこにあるかどうかをチェックインする必要/Users/chris/.rvm/gems/ruby-1.9.3-p194/gems/mws-0.1.18/lib/mws/apiがあります(そして、あいまいな権限を持っていません)。

そうでない場合は、gemspec に追加するのを忘れている可能性があります。

そこにある場合は、(デバッグ目的で) 絶対パスで要求/ロードしてみてください。

于 2012-07-16T19:54:39.983 に答える