首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails sidekiq传递REXML::Element

Rails sidekiq传递REXML::Element
EN

Stack Overflow用户
提问于 2013-09-26 03:57:01
回答 1查看 241关注 0票数 1

我正在尝试使用sidekiq向工人发送REXML::element。但是,当我这样做时,我得到一个错误:ActiveSupport::JSON::Encoding::CircularReferenceError

在本例中,我使用一个在线存储的XML文档,并运行一个worker,该worker将其划分为多个部分,然后创建子worker来处理每个部分。

代码语言:javascript
复制
require "rexml/document"
require 'open-uri'
class GroupUploadWorker
  include Sidekiq::Worker
  include REXML

  def perform(user_id, ip_address)
    url = URI.parse('https://s3-us-west-2.amazonaws.com/nick-grn-dev/alldata.xml')
    open(url) do |http|
      @response = http.read
    end
    @doc = Document.new(@response.force_encoding("ISO-8859-1").encode("UTF-8"))
    @doc.root.elements[1].elements.each do |group|
      SingelGroupUploadWorker.perform_async(user_id, ip_address, group)
    end
  end
end

我发现的问题是传递组变量时出现的问题。如果我传递一个字符串,它可以正常工作,但组变量是一个REXML::Element。恐怕我对系统的理解还不够好,无法理解这个错误。我在网上做了一些调查,但我不认为我问的问题是对的。任何帮助都将不胜感激。

有人建议我应该在其中添加一个堆栈跟踪。我得到的错误是在sidekiq it本身,所以我不确定如何获取,直到我在控制台中重现了错误。这就是console中发生的情况。

代码语言:javascript
复制
1.9.3p286 :011 > SingelGroupUploadWorker.perform_async(1, '127.0.0.1', @doc.root.elements[1].elements[1])
2013-09-26T01:49:32Z 37015 TID-oxoz25ihc INFO: Sidekiq client using redis://localhost:6379/0 with options {:size=>1}
ActiveSupport::JSON::Encoding::CircularReferenceError: object references itself
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-    3.2.11/lib/active_support/json/encoding.rb:75:in `check_for_circular_references'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:46:in `encode'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:252:in `block in encode_json'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:252:in `each'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:252:in `map'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:252:in `encode_json'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:220:in `block in encode_json'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:220:in `map'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:220:in `encode_json'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:48:in `block in encode'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:77:in `check_for_circular_references'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:46:in `encode'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/json/encoding.rb:31:in `encode'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/activesupport-3.2.11/lib/active_support/core_ext/object/to_json.rb:16:in `to_json'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/json-1.8.0/lib/json/common.rb:223:in `generate'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/json-1.8.0/lib/json/common.rb:223:in `generate'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq.rb:97:in `dump_json'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq/client.rb:103:in `block (2 levels) in raw_push'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq/client.rb:103:in `map'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq/client.rb:103:in `block in raw_push'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/connection_pool-1.1.0/lib/connection_pool.rb:49:in `with'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq.rb:67:in `redis'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq/client.rb:95:in `raw_push'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq/client.rb:44:in `push'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq/worker.rb:85:in `client_push'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/sidekiq-2.13.1/lib/sidekiq/worker.rb:40:in `perform_async'
from (irb):11
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start'
from /Users/suddenlyaware/.rvm/gems/ruby-1.9.3-p286/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
EN

回答 1

Stack Overflow用户

发布于 2013-10-20 02:56:08

我发现将任何类型的复杂对象传递给perform方法都会导致类似的问题。我所做的就是尝试将参数简化为简单的字符串或数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19014081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档