I wanted to get started with resque. So I created three files, one to create a dummy job, the other two to handle it:
--- image_transformer.rb --- # coding: UTF-8 class ImageTransformer @queue = 'image_transform_queue' def self.perform(asset_id) puts "perform" puts asset_id end end
--- create_job.rb --- # coding: UTF-8 require 'resque' require_relative 'image_transformer' Resque.enqueue(ImageTransformer, 'test')
--- Rakefile --- # coding: UTF-8 require_relative 'image_transformer' require 'resque/tasks'
Then I first execute $ ruby create_job.rb without problems. I can see the job in the resque queue.
Now I want to start a worker - but that fails:
$ QUEUE=* VVERBOSE=1 VERBOSE=1 rake resque:work --trace ** Invoke resque:work (first_time) ** Invoke resque:preload (first_time) ** Invoke resque:setup (first_time) ** Execute resque:setup ** Execute resque:preload ** Invoke resque:setup ** Execute resque:work *** Starting worker anpr-THINK:15292:* Signals QUIT, USR1, USR2, and/or CONT not supported. *** Registered signals *** Checking content_download *** Checking image_transform_queue *** Found job on image_transform_queue *** got: (Job{image_transform_queue} | ImageTransformer | ["test"]) rake aborted! "\xE4" on US-ASCII c:/ruby193/lib/ruby/gems/1.9.1/gems/multi_json-1.2.0/lib/multi_json/engines/json _common.rb:13:in `encode' c:/ruby193/lib/ruby/gems/1.9.1/gems/multi_json-1.2.0/lib/multi_json/engines/json _common.rb:13:in `to_json' c:/ruby193/lib/ruby/gems/1.9.1/gems/multi_json-1.2.0/lib/multi_json/engines/json _common.rb:13:in `encode' c:/ruby193/lib/ruby/gems/1.9.1/gems/multi_json-1.2.0/lib/multi_json.rb:88:in `en code' c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/helpers.rb:22:in `e ncode' c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/worker.rb:396:in `w orking_on' c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/worker.rb:133:in `b lock in work' c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/worker.rb:126:in `l oop' c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/worker.rb:126:in `w ork' c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/tasks.rb:34:in `blo ck (2 levels) in ' c:/ruby193/lib/ruby/1.9.1/rake/task.rb:205:in `call' c:/ruby193/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute' c:/ruby193/lib/ruby/1.9.1/rake/task.rb:200:in `each' c:/ruby193/lib/ruby/1.9.1/rake/task.rb:200:in `execute' c:/ruby193/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain' c:/ruby193/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' c:/ruby193/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain' c:/ruby193/lib/ruby/1.9.1/rake/task.rb:144:in `invoke' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_lev el' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:94:in `each' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handlin g' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:88:in `top_level' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:66:in `block in run' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handlin g' c:/ruby193/lib/ruby/1.9.1/rake/application.rb:63:in `run' c:/ruby193/bin/rake:32:in `' Tasks: TOP => resque:work
Does somebody have a clue what's going on? It looks like some encoding problem, but where?
I use Windows 7 (if that's relevant).
EDIT: I inserted debug output into the '#encode' method: {:queue=>"image_transform_queue", :run_at=>"2012/03/28 13:25:53 Mitteleurop\xE4i sche Sommerzeit", :payload=>{"class"=>"ImageTransformer", "args"=>["test"]}}
Apparently the problem is that the ":run_at" value contains a German umlaut (that's my locale).
MultiJson.dump
andMultiJson.load
. multi_json allows swapping of JSON engine. By default, it uses JsonGem, which has an issue with these characters (umlaut, emoji, etc). I haven't tried, but perhaps you can try swapping for Oj like this:MultiJson.use(:oj)
– awaage