Lorsqu'une nouvelle ressource est créée et il a besoin de faire un peu long traitement avant que la ressource est prêt, comment puis-je envoyer que le traitement loin dans l'arrière-plan où il ne tiendra pas la demande actuelle ou autre le trafic vers mon application Web?Ruby on Rails: Comment faire fonctionner les choses en arrière-plan?
dans mon modèle:
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
Ces jours-ci, les options les plus utilisées/les mieux pris en charge sont [sidekiq] (https://github.com/mperham/sidekiq), [resque ] (https://github.com/defunkt/resque) et [delayed_job] (https://github.com/collectiveidea/delayed_job). À mon humble avis, Sidekiq est le meilleur pour les files d'attente à haut débit, et delayed_job est le meilleur pour un très faible débit. –
Une autre option est [IronWorker] (http://www.iron.io) si vous voulez un traitement en arrière-plan "en tant que service" et ne jamais avoir à vous soucier de l'idée de serveurs ou de files d'attente. IronMQ/IronWorker propose également des tentatives automatiques, des journaux de tâches, des webhooks, etc. Il s'intègre parfaitement avec Rails. Voici quelques vidéos: https://www.youtube.com/user/ironiodevelopers – Chad