2013-05-04 3 views
18

Ich verwende einen Sidekiq-Mitarbeiter, um einige Anfragen an Facebook zu stellen, nachdem sich ein Benutzer zum ersten Mal angemeldet hat. Normalerweise dauert die Aufgabe ungefähr 20 Sekunden oder so.Der beste Weg, um die Fertigstellung eines Sidekiq-Jobs zu überwachen?

Ich möchte einige Informationen auf der Seite mit einer Ajax-Anfrage laden, sobald die Synchronisierung abgeschlossen ist, bin aber unsicher, wie Sie am besten den Abschluss des Jobs mit Javascript überprüfen.

Eine Möglichkeit wäre, den Sidekiq Worker so zu konfigurieren, dass ein Cookie gesetzt wird, nachdem alle anderen Jobs ausgeführt wurden. Dann kann ich eine setTimeout-Funktion verwenden, um vor dem Aufruf der Ladefunktion nach dem Cookie zu suchen. Aber ich bin mir nicht sicher, ob dies der beste Weg ist, dies zu tun. Könnte ich stattdessen Redis verwenden?

+0

In einem Sidekiq-Worker können Sie keinen Cookie setzen, denn um einen Cookie an den Client zu senden, müssen Sie ihm eine HTTP-Antwort senden, und der Worker ist kein Server. – RocketR

Antwort

1

Paul, zunächst muss man sich diese PubSub on Rails tutorial ansehen!

Dies ist Ihre bessere Lösung, um Benutzer zu benachrichtigen, wenn asynchrone Dinge im Backend auftreten/abgeschlossen werden.

Tipp: Wenn Sie Heroku verwenden, werden Sie viele Bibliotheken mit dieser Komplexität für Sie haben.

1

Paul, ich würde Ihre Sorgen getrennt halten. Ich gehe davon aus, dass der sidekiq-Mitarbeiter einige Rails-activerecord-Modelle verwendet, um einige Informationen an facebook zu senden. Ich würde eine Flagge auf diesem Modell auf True setzen, wenn die Facebook-Anfragen erfolgreich abgeschlossen werden.

Dann können Sie ein setTimeout in js haben, um für diese Änderung in der db abzufragen ... oder für schnellere, automatischere Antworten, die Sie mit Web-Sockets untersuchen können. Ich habe in der Vergangenheit eine Bibliothek namens Pusher verwendet. Es ist ziemlich einfach mit Rails zu integrieren und sorgt für eine sehr schnelle Benutzeroberfläche.