Ruby rake resque:简单示例中的工作失败

Ruby rake resque:简单示例中的工作失败,ruby,encoding,rake,resque,Ruby,Encoding,Rake,Resque,我想从resque开始。因此,我创建了三个文件,一个用于创建虚拟作业,另两个用于处理它: --- image_transformer.rb --- # coding: UTF-8 class ImageTransformer @queue = 'image_transform_queue' def self.perform(asset_id) puts "perform" puts asset_id end

我想从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 ---image_transformer.rb--- #编码:UTF-8 类图像转换器 @队列='image\u transform\u queue' 定义自我执行(资产id) “表演” 放置资产标识 结束 结束 ---创建_job.rb--- #编码:UTF-8 需要“重新设置” 需要相对的“图像变压器” Resque.enqueue(ImageTransformer,“测试”) ---耙子--- #编码:UTF-8 需要相对的“图像变压器” 需要“重新设定/任务” 然后,我首先毫无问题地执行$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 $QUEUE=*VVERBOSE=1 VERBOSE=1 rake resque:work--trace **调用resque:work(第一次) **调用resque:preload(第一次) **调用resque:setup(第一次) **执行resque:setup **执行resque:预加载 **调用resque:setup **执行resque:工作 ***起始工人anpr认为:15292:* 不支持信号退出、USR1、USR2和/或CONT。 ***注册信号 ***正在检查下载的内容 ***正在检查图像\u转换\u队列 ***在图像\u转换\u队列中找到作业 ***got:(作业{image_transform_queue}| ImageTransformer |[“test”]) 雷克流产了! US-ASCII上的“\xE4” c:/ruby193/lib/ruby/gems/1.9.1/gems/multi_json-1.2.0/lib/multi_json/engines/json _通用.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 _通用.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 代码' 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 "在" c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/worker.rb:133:in`b 锁定工作' c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/worker.rb:126:in`l 哎呀 c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/worker.rb:126:in`w 奥克 c:/ruby193/lib/ruby/gems/1.9.1/gems/resque-1.20.0/lib/resque/tasks.rb:34:in`blo ck(2级)在' 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(两级)位于顶层 埃尔 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`' 任务:TOP=>resque:work 有人知道发生了什么事吗?这看起来像是一些编码问题,但在哪里呢

我使用Windows7(如果相关的话)

编辑: 我将调试输出插入了“#encode”方法: {:queue=>“image\u transform\u queue”,:run\u at=>“2012/03/28 13:25:53 Mitteleurop\xE4i sche Sommerzeit“,:有效负载=>{“类”=>“图像转换器”,“参数”=>[“测试”]}


显然,问题在于“:run_at”值包含一个德语umlaut(这是我的语言环境)。

要将其从未应答列表中删除,请执行以下操作:


我将调试输出插入了“#encode”方法:

{
    :queue=>"image_transform_queue",
    :run_at=>"2012/03/28 13:25:53 Mitteleurop\xE4i sche Sommerzeit",
    :payload=>{"class"=>"ImageTransformer", "args"=>["test"]}
}

显然,问题在于
:run_at
值包含一个德语umlaut(这是我的语言环境)。

您能制作一个再现问题的最低限度的可运行版本吗?我们可以试试吗?干得好!您应该将此作为答案发布。Resque正在使用multi_json gem序列化负载——它调用
MultiJson.dump
MultiJson.load
。multi_json允许交换json引擎。默认情况下,它使用JsonGem,这与这些字符(umlaut、emoji等)有关。我还没有尝试过,但也许您可以尝试像这样交换Oj:
MultiJson.use(:Oj)
$ 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
{
    :queue=>"image_transform_queue",
    :run_at=>"2012/03/28 13:25:53 Mitteleurop\xE4i sche Sommerzeit",
    :payload=>{"class"=>"ImageTransformer", "args"=>["test"]}
}