通过数据库中的处理状态轮询Sidekiq作业完成

时间:2016-06-20 09:47:46

标签: javascript jquery ruby-on-rails sidekiq polling

我正在尝试向用户显示一条简单的消息,同时创建自定义PDF并通过Paperclip将其附加到模型中。然后在完成后显示预览。

我能找到的最简单的解决方案是Mike Perham在this question中的回应。 “使用数据库存储每张照片的状态,让Sidekiq更新状态。”

毫无疑问,你会注意到我还在学习Javascript,JQuery,Rails&如何写出好的SO问题。尽管如此,到目前为止我还是弗兰肯斯坦所做的。

如果我在这里朝着正确的方向努力,请告诉我?

# 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()

1 个答案:

答案 0 :(得分:1)

使用您所拥有的工具,您似乎走在了正确的轨道上。在你的用户需要更强大的解决方案之前保持简单是恕我直言。

如果您希望有更多这样的交互(即用户做某事并等待更新),您可以考虑使用Web套接字甚至使用https://rethinkdb.com等工具。当然,这取决于你计划拥有多少次这样的互动。