Ruby on rails sidekiq worker方法的参数

Ruby on rails sidekiq worker方法的参数,ruby-on-rails,ruby-on-rails-4,sidekiq,Ruby On Rails,Ruby On Rails 4,Sidekiq,我正在使用sidekiq执行一些后台工作,但是在将参数传递给sidekiq的worker类的perform方法时,我有一些疑问 场景: 用户一进入我的应用程序,我就将日志信息存储到我的型号用户会话中 像往常一样,在我的控制器中执行专用操作。但是在向用户显示信息之后,我需要执行一些额外的操作,并且需要更新user\u sessionmodel中的一列 遵循上述程序 步骤1:将gem'sidekiq'添加到gem文件中 第2步:安装'redis'gem 步骤3:捆绑安装 步骤4: class MyC

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

场景: 用户一进入我的应用程序,我就将日志信息存储到我的型号
用户会话中

像往常一样,在我的控制器中执行专用操作。但是在向用户显示信息之后,我需要执行一些额外的操作,并且需要更新
user\u session
model中的一列

遵循上述程序

步骤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
步骤6:启动rails服务器

步骤7:在另一个选项卡中启动
bundle exec sidekiq

错误
NoMethodError(JSON::Ext::Generator::State:0x007f1b的未定义方法“key”…

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

这是更好的方法:

array = [param1,param2]

UpdateWorker.perform_async(array)

现在,在worker中,您可以使用array

我需要降级我的多json版本吗?因此,首先要做的是在控制器中记录param1和param2的类型。几乎可以肯定的是,您正在向Sidekiq传递一个复杂的、不可序列化的对象。@PeterGoldstein是一个新手,我对您的评论不太了解。您能解释一下吗请在控制器中的UpdateWorker行之前添加以下-
logger.error“Param 1:#{param1.class.name}Param2:#{Param2.class.name}”
。这将准确地告诉您要传递给UpdateWorker.perform方法的内容。并且您确定没有未使用字符串和整数的旧作业?Redis为空?您可以使用Sidekiq web UI确认这一点。
array = [param1,param2]

UpdateWorker.perform_async(array)