2016-06-20 25 views
0

Ich versuche, meinen Benutzern eine einfache Nachricht zu zeigen, während ihre benutzerdefinierte PDF erstellt und über Paperclip an das Modell angehängt wird. Zeigen Sie anschließend die Vorschau an, sobald sie abgeschlossen ist.Polling Sidekiq Job für die Fertigstellung über Verarbeitungsstatus in der Datenbank

Die einfachste Lösung, die ich finden kann, ist Mike Perhams Antwort in this question. "Verwenden Sie die Datenbank, um den Status jedes Fotos zu speichern und Sidekiq den Status aktualisieren zu lassen."

Kein Zweifel, Sie werden feststellen, dass ich noch Javascript, JQuery, Rails & lernen, wie man gute SO Fragen schreibt. Trotzdem, hier habe ich bis jetzt Frankenstein-ed.

Bitte lassen Sie mich wissen, wenn ich hier in die richtige Richtung arbeite?

# generate_insert.rb 
class GenerateInsert 
    include Sidekiq::Worker 
    def perform(customization_id) 
    customization = Customization.find(customization_id) 
    customization.update_attribute(:processing, true) 
    # code to perform, generate PDF via Prawn and attach via Paperclip 
    customization.update_attribute(:processing, false) 
    customization.save! 
    end 
end 

# customizations/show.html.erb 
<div id='message'>First Message</div> 

# messages.js 
var i = 1; 
var sampleMessages = [ "First Message", "Second Message", "Third Message" ]; 
    setInterval(function() { 
     var newText = sampleMessages[i++ % sampleMessages.length]; 
     $("#message").fadeOut(500, function() { 
      $(this).text(newText).fadeIn(500); 
     }); 
    }, 1 * 3000); 
}); 

# show.js.erb 
$("#message").replaceWith("<%= j render 'customization' %>"); 

# poller.js 
CustomizationPoller = 
poll: -> 
    setTimeout @request, 5000 

request: ->, 
    $.get($('???').data('url')) 

jQuery -> 
if $('#???').length > 0 // customization processing? 
    CustomizationPoller.poll() 

Antwort

1

Mit den Tools, die Sie haben, scheinen Sie auf dem richtigen Weg zu sein. Halten Sie es einfach, bis Ihre Benutzer eine robustere Lösung fordern, ist IMHO eine gute Idee.

Wenn Sie jedoch versuchen, mehr Interaktionen wie diese zu haben (d. H. Benutzer macht etwas und wartet auf Update), können Sie Web Socket verwenden oder sogar Werkzeuge wie https://rethinkdb.com verwenden. Natürlich hängt es davon ab, wie viele solcher Interaktionen Sie planen.

+0

Vielen Dank für das Einspielen. Anerkannt. – rclark