Nous travaillons sur un planificateur pour planifier les travaux pour notre application rails. Nous voulons réduire l'empreinte de la mémoire et l'utilisation du processeur que ce script ruby prend lorsqu'il planifie donc nous le construisons en tant que projet séparé. Les éléments sont ajoutés à la file d'attente sans problème, mais lorsqu'ils sont exécutés par sidekiq, ils provoquent l'erreur suivante.méthode non définie désérialiser, pour travail ajouté en dehors de mon projet rails
undefined method `deserialize' for #<SummarizationStartAllJob:0x007f7fc4183080>
Le code pour le projet est le suivant:
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
Le message qui est généré et ajouté à la file d'attente (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
}
Message déposé par SummarizationStartAllJob.perform_async
(analysé comme JSON, pour une meilleure lisibilité)
{
"class":"SummarizationStartAllJob",
"args":[
],
"retry":true,
"queue":"summarization",
"backtrace":true,
"jid":"d5b9d38f39bff95acee0dc61",
"created_at":1505989631.233542,
"enqueued_at":1505989631.242933
}
Votre 'SummarizationStartAllJob' n'a pas la méthode' deserialize'. Est-ce un travail actif? –
'SidekiqWorker' devrais-je en faire un' travail actif? '. Il fonctionne correctement lorsque je fais 'SummarizationStartAllJob.perform_async' dans ma console rails. – coderhs
alors, je suppose, votre code de construction de métadonnées manuelles manque quelque chose. Pouvez-vous le comparer à ce que 'perform_async' produit? –