sidekiq worker方法的参数

时间:2014-12-08 07:02:51

标签: ruby-on-rails ruby-on-rails-4 sidekiq

我正在使用sidekiq来执行一些后台工作,但在将参数传递给perform工人类的sidekiq's方法时有一些疑问。

情境: 一旦用户进入我的应用程序,我就会将日志信息存储到我的模型user_sessions

在我的控制器中执行常规操作。但在向用户显示信息后,我需要执行一些额外的操作,并需要更新user_session模型中的一列。

后面提到的here

程序

第1步:将gem 'sidekiq'添加到gem文件中。

第2步:已安装'redis' gem。

第3步:捆绑安装

第4步:

class MyController < ApplicationController
 def MyAction
  #perform dedicated action
  @info = #render data to user
  param1 = #parameter to find in user_session model(its a string.i don't get id of model here)
  param2 = #extra param to perform task
  UpdateWorker.perform_async(param1,param2)
 end
end

步骤5:在app文件夹下创建一个工作文件夹。

class UpdateWorker
    include Sidekiq::Worker
    def perform(param1,param2)
        puts "======> updating "
        #retrieve `user_session` based on param1(note: param1 is not an id)
        #perform update functions
        UserSession.update_attribute(:column, value)
    end
end

第6步:开始rails server

第7步:在另一个标签中bundle exec sidekiq

错误NoMethodError (undefined method 'key?' for JSON::Ext::Generator::State:0x007f1b......

如上所述herehere我需要在参数中传递对象的id。 至于我的情况,有人可以建议我如何解决我的问题吗?

1 个答案:

答案 0 :(得分:3)

这将是更好的方式:

array = [param1,param2]

UpdateWorker.perform_async(array)

现在在worker中你可以使用数组