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)