我正在使用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......
答案 0 :(得分:3)
这将是更好的方式:
array = [param1,param2]
UpdateWorker.perform_async(array)
现在在worker中你可以使用数组