2016-03-02 58 views
0

假设我有一个Sidekiq工人是这样的: 如何在Sidekiq中使用Flash对象?

class MyWorker 
    include Sidekiq::Worker 

    def perform 
    message = SomeImportantClass.new.get_message 
    flash.now[:notice] = message 
    end 
end 

因此,当用户访问页面的工人启动。不离开页面用户从Sidekiq工作人员获得通知。 我在这个领域不是很有经验,所以我不知道从哪里开始。

回答

1

您不能从工作人员访问flash,因为他们不在请求上下文中。

您必须通过某种存储(例如主数据库或memcached/redis)与您的请求上下文进行通信。

轮廓是这样的:

  1. Store中的存储

    class MyWorker 
        include Sidekiq::Worker 
    
        def perform 
        message = SomeImportantClass.new.get_message 
        redis.set("messages:#{message.user.id.to_s}") = message.text 
        end 
    end 
    
  2. 消息请在您的应用程序的端点,将显示这些消息对当前用户

    class MyController 
        def status 
        msg = redis.get("messages:#{current_user.id.to_s}") 
        render text: msg 
        end 
    end 
    
  3. 让客户端JS轮询此端点并显示一个否tification/modal /无论何时收到消息。

你必须使用轮询或异步更新(网页套接字等)的其他机制,原因无它,一旦网页被渲染,它不会自动地知道你的工人的进步。

相关问题