Я хотел начать с resque. Итак, я создал три файла, один для создания фиктивной работы, два других для ее обработки:
--- 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'
Затем я без проблем запускаю $ ruby create_job.rb. Я вижу работу в очереди Resque.
Теперь я хочу запустить работника, но это не получается:
$ 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
Кто-нибудь знает, что происходит? Похоже, какая-то проблема с кодировкой, но где?
Я использую Windows 7 (если это актуально).
EDIT:
Я вставил отладочный вывод в метод "#encode":
{: queue => "image_transform_queue",: run_at => "2012/03/28 13:25:53 Mitteleurop \ xE4i
sche Sommerzeit ",: payload => {" class "=>" ImageTransformer "," args "=> [" test "]}}
Очевидно, проблема в том, что значение ": run_at" содержит умлаут на немецком языке (это мой язык).