2013-09-25 78 views
1

我試圖發送一個REXML::element給使用sidekiq的工人。然而,當我這樣做時,我得到一個錯誤:ActiveSupport::JSON::Encoding::CircularReferenceErrorRails sidekiq通過REXML ::元素

在這種情況下,我正在採取一種XML文檔,它存儲在線並運行一個工人,將其分爲幾個部分,然後創建子工作人員來處理每個部分。

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它自我,所以我不知道如何得到,直到我在控制檯中重現錯誤。這是控制檯中發生的情況。

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' 

回答

0

我發現傳遞任何類型的複雜對象到執行方法會導致類似的問題。我所做的是試圖簡化參數,以簡單的字符串或數字。