Problème d'utilisation Resque, Rails 3 et Active-recored
-
08-10-2019 - |
Question
J'ai cette classe, qui réponse à effectuer à exécuter par « Resque », j'ai une erreur
à ce recipient.response = response.body
ligne Wich est undefined method response=' for #<Hash:0x00000003969da0>
Je pense que parce que le travailleur et ActiveRecord ne peuvent pas travailler ensemble.
P.S je l'ai déjà chargé mon environnement et cette classe placé dans le répertoire lib
Utilisation: Ruby 1.9.2 Rails 3 Resque 1.10.0
class Msg
def self.perform(message,sender,host, path, recipient)
message_logger ||= Logger.new("#{Rails.root}/log/message.log")
response = Net::HTTP.get_response(host, path)
begin
recipient.response = response.body
recipient.sent_at = Time.zone.now
recipient.save
# Logging
log = "Message #{
message.sent_at}\n\tRespone:\n\t\tBody: #{response.body}\n\t\tCode: #{response.code}\n"
message_logger.info(log)
rescue Exception => e
message_logger.error(e.message + '/n' + e.backtrace.inspect)
end
end
end
La solution
Resque utilise sérialisation JSON. sérialisation JSON ne vous permettra de désérialiser un objet avec la méthode intacte.
Si vous avez une instance de destinataire (appelé « bénéficiaire ») et que vous voulez l'utiliser dans la méthode pour effectuer / persisteront une réponse, alors vous devriez enqueue l'identifiant du destinataire et chercher dans votre couche de persistance lorsque Perform est appelé .
https://github.com/defunkt/resque (caisse de la section sur la persistance)
Resque est différent de DelayedJob / arrière-plan d'emploi et d'autres de cette façon. (Ce qui est la raison pour laquelle je l'aime. Peut partager la même file d'attente par de multiples implémentations de Ruby, JRuby, mri, ...)
Autres conseils
Cela ne ressemble pas à un problème avec resque et activerecord du tout. Il dit que le paramètre recipient
que vous avez passé dans était un hachage. Où est le code qui le travail en file d'attente? Vous pouvez également jeter un oeil une sortie de journal du travailleur où vous avez vu ce message d'erreur pour voir ce que les paramètres passés dans le travail étaient.