【问题标题】:Weird LoadError on custom ruby gem自定义红宝石宝石上的奇怪 LoadError
【发布时间】:2012-08-06 07:03:12
【问题描述】:

我有一个自定义 gem,当我将它作为 gem 安装并尝试在 irb 中使用它时遇到一个非常奇怪的 LoadError。

项目文件夹中的 rspec 测试一切正常。这仅在将其用作 irb 中的实际宝石时才会发生。

它在 (/lib/mws/api/order_response.rb) 处引发 LoadError 异常的文件确实存在。我尝试重命名文件并更新需要它的文件 (/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

还有我的文件结构

【问题讨论】:

    标签: ruby gem


    【解决方案1】:

    对于任何感兴趣的人,我正在使用 Jeweler 来处理构建这颗宝石。事实证明,Jeweler 在构建 gemspec 时会使用您的 Git 存储库。

    如果您尚未将所有必需的文件添加到您的 git 存储库,Jeweler 的 gemspec rake 任务将不会在生成新的 gemspec 文件时包含它们。

    【讨论】:

    • 哇。今天这个答案对我帮助很大。我以为我要疯了或什么的。 :)
    • 很高兴我能帮上忙。它也让我陷入了循环。
    【解决方案2】:

    Can 应该签入/Users/chris/.rvm/gems/ruby-1.9.3-p194/gems/mws-0.1.18/lib/mws/api,如果文件位于那里(并且没有模糊的权限)。

    如果不是这样,您可能忘记将其添加到您的 gemspec 中。

    如果存在,请尝试使用绝对路径要求/加载它(用于调试目的)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多