我们正在开发一个调度程序来调度rails应用程序的作业。我们希望减少这个ruby脚本在调度时占用的内存和cpu使用量,所以我们将它作为单独的项目构建。项被添加到队列中,没有任何问题,但是当由sidekiq执行时,它们会导致以下错误。
undefined method `deserialize' for #<SummarizationStartAllJob:0x007f7fc4183080>该项目的代码如下:
require_relative 'sidekiq_redis_jobs'
require 'redis'
require 'json'
redis = Redis.new(:url => "redis://127.0.0.1:6379/0")
msg = SidekiqjJobMessage.generate(class_name: "SummarizationStartAllJob", arguments: [], queue: 'summarization')
redis.sadd("queue", "summarization")
redis.lpush("queue:summarization", JSON.dump(msg))SidekiqjJobMessage
require 'securerandom'
module SidekiqjJobMessage
def self.generate(class_name:, arguments: [], queue: 'default')
queue_name = "queue:#{queue}"
msg = {
"class" => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
"wrapped" => class_name,
"queue" => queue_name,
"args" => [{
'job_class' => class_name,
'job_id' => SecureRandom.hex(),
'queue_name' => queue_name,
'arguments' => arguments,
'locale'=>'en'}],
'retry' => false,
'jid' => SecureRandom.hex(12),
'created_at' => Time.now.to_f,
'enqueued_at' => Time.now.to_f
}
end
end生成并添加到队列中的消息(redis)。
{
"class" => "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper",
"wrapped" => "SummarizationStartAllJob", "queue" => "queue:summarization",
"args" => [{ "job_class" => "SummarizationStartAllJob",
"job_id" => "f9fc7143bacd638d61938fcd74a81f21",
"queue_name" => "queue:summarization",
"arguments" => [],
"locale" => "en" }],
"retry" => false,
"jid" => "58565f2cf407de4fbc6d5013",
"created_at" => 1505988923.1029198,
"enqueued_at" => 1505988923.102925
}由SummarizationStartAllJob.perform_async插入的消息(解析为json,以提高可读性)
{
"class":"SummarizationStartAllJob",
"args":[
],
"retry":true,
"queue":"summarization",
"backtrace":true,
"jid":"d5b9d38f39bff95acee0dc61",
"created_at":1505989631.233542,
"enqueued_at":1505989631.242933
}发布于 2017-09-21 10:34:21
我的猜测是,您的队列元数据生成代码不能准确地反映执行MyJob.perform_async时发生的情况。您应该比较这两个输出,并找出您的不同之处。
https://stackoverflow.com/questions/46340903
复制相似问题