首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的方法反序列化,用于在rails项目之外添加的工作。

未定义的方法反序列化,用于在rails项目之外添加的工作。
EN

Stack Overflow用户
提问于 2017-09-21 09:56:31
回答 1查看 705关注 0票数 1

我们正在开发一个调度程序来调度rails应用程序的作业。我们希望减少这个ruby脚本在调度时占用的内存和cpu使用量,所以我们将它作为单独的项目构建。项被添加到队列中,没有任何问题,但是当由sidekiq执行时,它们会导致以下错误。

代码语言:javascript
复制
undefined method `deserialize' for #<SummarizationStartAllJob:0x007f7fc4183080>

该项目的代码如下:

代码语言:javascript
复制
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

代码语言:javascript
复制
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)。

代码语言:javascript
复制
{
  "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,以提高可读性)

代码语言:javascript
复制
{
   "class":"SummarizationStartAllJob",
   "args":[

   ],
   "retry":true,
   "queue":"summarization",
   "backtrace":true,
   "jid":"d5b9d38f39bff95acee0dc61",
   "created_at":1505989631.233542,
   "enqueued_at":1505989631.242933
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-21 10:34:21

我的猜测是,您的队列元数据生成代码不能准确地反映执行MyJob.perform_async时发生的情况。您应该比较这两个输出,并找出您的不同之处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46340903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档