【问题标题】:Within code called by Resque worker, why is object a hash?在 Resque worker 调用的代码中,为什么对象是哈希?
【发布时间】:2012-08-03 06:16:27
【问题描述】:

我无法处理由 Resque 工作程序触发的代码中的对象。这是一个 sinatra/datamapper 应用程序。 Feed 类是一个 DataMapper 模型。这是订阅者代码

class Subscriber
  @queue = :subscriptions_queue

  def self.perform(feed_id)
    feed = Feed.get(feed_id)
    feed.subscribe()
  end
end

运行良好,直到 subscribe() 方法执行

class Feed
  def subscribe    
    feed = Feedzirra::Feed.fetch_and_parse(url)
    raise feed.description
  end
end

这会导致错误:

** [23:09:44 2012-08-02] 32028: (Job{subscriptions_queue} | Subscriber | [2]) failed: #<NoMethodError: undefined method `description' for #<Hash:0x007fa6f4b97e48>>

为什么会是一个哈希?我可以在提要对象上调用检查:

class Feed
  def subscribe    
    feed = Feedzirra::Feed.fetch_and_parse(url)
    raise feed.inspect
  end
end

如预期的那样转储提要:

** [23:01:31 2012-08-02] 32010: (Job{subscriptions_queue} | Subscriber | [2]) failed: #<RuntimeError: {#<Addressable::URI:0x3fefd45f2fb8 URI:http://feeds.feedburner.com/scoutapp>=>#<Feedzirra::Parser::RSSFeedBurner:0x007fdfaa024f18 @title="Scout ~ The Blog", @url="http://blog.scoutapp.com/", @description="Scout ~ The Blog", @hubs=["http://pubsubhubbub.appspot.com/"], @entries=

看看有什么地方可以看吗?

【问题讨论】:

    标签: ruby resque feedzirra


    【解决方案1】:

    实际上是一个带有一对Addressable::URI =&gt; Feedzirra::Parser::RSSFeedBurner的哈希

    如果您不知道如何获取该 URI 对象,只需执行 feed[feed.keys[0]].descriptionfeed.values[0]

    同时检查 github repo 似乎你应该有一个 entries 方法。如果您从根 url 获取,就会发生这种情况。因此,如果您只想获得第一个,则可以使用feeds.entries.first

    【讨论】:

    • 仍然看起来很奇怪,如果我在 irb 中执行相同的代码并调用 .inspect 它只是一个(不是哈希对)=> "#<:parser::rssfeedburner:0x007f9b81132170>
    • 啊,我现在明白了,Feed 类上的 url 属性是 Addressable::URI,如果 url 不是字符串,Feedzirra 将返回哈希值。在 irb 中,我使用的是字符串。感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2013-08-02
    • 2015-04-29
    • 2013-03-24
    • 2012-07-16
    • 2012-04-23
    • 1970-01-01
    相关资源
    最近更新 更多