Delayed_job funktioniert endlich für mich (mit dem Collectidadea-Juwel in RoR3) für ein paar Aufgaben. Die erste besteht darin, dass ein Administrator eine ZIP-Datei mit Bildern in eine Galerie hochlädt und jedes Bild extrahiert, um ein Fotoobjekt zu erstellen, das zu dieser Galerie gehört. Die zweite ist das Löschen von Galerien. Diese Galerien können ziemlich groß sein (550 Bilder in ~ 3 Minuten), und ich würde gerne zeigen können, dass eine Galerie noch bearbeitet wird oder für die Löschung in die Warteschlange gestellt wird, auch wenn sie nicht vollständig angezeigt wird.Rails 3 + delayed_job: Wie kann ich den Fortschritt einer Aufgabe verfolgen (z. B. Fortschrittsbalken auf der Zielseite)?
Im Moment verwende ich nur die Standardtechnik (@ gallery.delay.extract_photos und @ gallery.delay.destroy).
Wenn der Administrator auf den Link zum Extrahieren klickt, wird er auf die Galerieseite (die leer ist) mit einer Flash-Nachricht weitergeleitet, die ihm mitteilt, dass er die Galerie verarbeitet. Wenn Sie die Seite regelmäßig aktualisieren, wird die Liste der Bilder angezeigt, die bis zu diesem Zeitpunkt extrahiert wurden. Es ist jedoch nicht klar, wann der Job beendet wird, da das Auffrischen die Flash-Nachricht löscht. Grundsätzlich möchte ich in der Lage sein, entweder einen Fortschrittsbalken anzuzeigen, der jede Sekunde ungefähr mit dem Fortschritt der Menge aktualisiert ([====== ] 33/86)
und/oder die Galerie zu aktualisieren, um die Bilder anzuzeigen, wie sie hinzugefügt werden.
Das Löschen großer Galerien kann auch viel Zeit in Anspruch nehmen, daher möchte ich das auch als verspäteten Job behalten. Die Galerie ist jedoch immer noch vorhanden, wenn Sie nach dem Löschen auf die Zielseite gehen, sodass sie nach der Aktualisierung angezeigt wird, nachdem sie vollständig verschwunden ist. Ich möchte es entweder so kennzeichnen, dass es zum Löschen in die Warteschlange gestellt wird, oder einen Fortschrittsbalken anzeigen und es nach dem Löschen verschwinden lassen.
Ich habe RoR3 AJAX Hilfe gesucht, aber alles, was ich finde, war für 2.3.8 und ist veraltet. Außerdem muss ich wissen, wie man nachverfolgen kann, ob ein Job noch ausgeführt wird, und ich habe nichts dergleichen in der Dokumentation von Collectiadea bemerkt. Ich denke, da Jobs in einer Tabelle gespeichert sind, könnte ich es vielleicht mit DelayedJob.thisjob.exists verfolgen? oder etwas in dieser Richtung, aber DelayedJob.all in der Rails-Konsole zu versuchen gab mir nur Fehler (sogar während der Job lief).
Also meine Frage, zusammenfassend: Wie kann ich einen verzögerten Job verfolgen und seinen Fortschritt auf eine dieser Arten in der Ansicht anzeigen? [Bearbeiten] Ich weiß, dass ich aktive Polling auf den Galerieseiten tun kann, aber ich will das nicht die ganze Zeit passieren lassen - nur während der Job ausgeführt wird (oder geplant ist). Gibt es eine Möglichkeit, die Existenz eines Jobs zu testen, der gerade ausgeführt wird oder ausgeführt werden soll? Weil ich keinen Weg gefunden habe, es in den Ansichten zu verfolgen.
Danke.
Ich benutze Dreamhost, und Nginx ist eine optionale Funktion, wenn Sie ein PS-Konto haben, zu dem ich mich leider nicht verpflichten kann/will. Ich bin mir nicht sicher, ob dies die Lösung ist, nach der ich suche, aber das ist definitiv etwas, das ich in einer zukünftigen Phase des Projekts in Betracht ziehen werde. –