Quando si crea una nuova risorsa e ha bisogno di fare un po 'lunga elaborazione prima che la risorsa è pronta, come faccio a inviare che l'elaborazione via in secondo piano dove non terrà fino la richiesta corrente o altro traffico verso la mia web-app?Ruby on Rails: come eseguire le cose in background?
nel mio modello:
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
In questi giorni, le opzioni/best-supportate più utilizzati sono [sidekiq] (https://github.com/mperham/sidekiq), [Resque ] (https://github.com/defunkt/resque) e [delayed_job] (https://github.com/collectiveidea/delayed_job). IMHO, Sidekiq è il migliore per le code ad alto throughput e delayed_job è il migliore per un throughput molto basso. –
Un'altra opzione è [IronWorker] (http://www.iron.io) se si desidera l'elaborazione in background "come servizio" e non bisogna mai preoccuparsi dell'idea di server o di accodamento. IronMQ/IronWorker offre anche tentativi automatici, registri delle attività, webhook, ecc. Si integra perfettamente con Rails. Ecco alcuni video: https://www.youtube.com/user/ironiodevelopers – Chad