Cuando se crea un nuevo recurso y tiene que hacer un poco de un procesamiento más largo antes de que el recurso está listo, ¿Cómo envío que el procesamiento de distancia en el fondo donde no se puede sostener la solicitud actual u otro el tráfico a mi aplicación web?Ruby on Rails: ¿Cómo ejecutar cosas en segundo plano?
en mi modelo:
class User < ActiveRecord::Base
after_save :background_check
protected
def background_check
# check through a list of 10000000000001 mil different
# databases that takes approx one hour :)
if(check_for_record_in_www(self.username))
# code that is run after the 1 hour process is finished.
user.update_attribute(:has_record)
end
end
end
En estos días, los/las opciones con más seguidores más utilizados son [sidekiq] (https://github.com/mperham/sidekiq), [resque ] (https://github.com/defunkt/resque), y [demorado_trabajo] (https://github.com/collectiveidea/delayed_job). En mi humilde opinión, Sidekiq es el mejor para colas de alto rendimiento, y el retraso de trabajo es el mejor para un rendimiento muy bajo. –
Otra opción es [IronWorker] (http://www.iron.io) si desea procesar en segundo plano "como un servicio" y nunca tener que preocuparse por la idea de servidores o cola. IronMQ/IronWorker también ofrece reintentos automáticos, registros de tareas, webhooks, etc. Se integra muy bien con Rails. Aquí hay algunos videos: https://www.youtube.com/user/ironiodevelopers – Chad