Problema usando Resque, Carriles 3 y Active-recored
-
08-10-2019 - |
Pregunta
Tengo esta clase, que la respuesta a realizar para ser dirigido por "Resque", tengo un error
en esta línea recipient.response = response.body
cual es undefined method response=' for #<Hash:0x00000003969da0>
creo que debido a que el trabajador y ActiveRecord no pueden trabajar juntos.
P.S Ya he cargado mi entorno y esta clase se coloca en el directorio lib
Uso: 1.9.2 rubí carriles 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
Solución
Resque utiliza la serialización JSON. Serialización JSON no le permitiría deserializar un objeto con el método intacta.
Si tiene una instancia del destinatario (llamado "receptor") y desea utilizar en el método para llevar a cabo / persistir una respuesta, entonces debería poner en cola el identificador del receptor y la tomase de su capa de persistencia cuando se realizan es llamada .
https://github.com/defunkt/resque (checkout la sección sobre Persistencia)
Resque es diferente de DelayedJob / job de fondo y otra de esta manera. (Por eso me gusta. La misma cola puede ser compartida por múltiples implementaciones rubí, jruby, resonancia magnética, ...)
Otros consejos
Eso no suena como un problema con resque y activerecord en absoluto. Se dice que el recipient
parámetro que pasó fue un hash. ¿Dónde está el código que pone en cola el trabajo? También puede echar un vistazo a la salida del registro del trabajador donde viste ese mensaje de error para ver lo que los parámetros pasados ??en el trabajo eran.