如何将current_user传递给Sidekiq的Worker

我试图将current_userUser.find(1)传递给工作模块,但在sidekiq的仪表板中获取错误(localhost:3000 / sidekiq / retries):

NoMethodError:未定义的方法`支持’为“#”:String

注意:我的关系很好,即:

 u = User.find(1) u.supports #=> [] 

supports_controller.rb:

 def create @user = current_user ProjectsWorker.perform_async(@user) ... end 

应用程序/工人/ projects_worker.rb:

 class ProjectsWorker include Sidekiq::Worker def perform(user) u = user @support = u.supports.build(support_params) end end 

重新启动我的sidekiq服务器没有任何区别。 这是在我的开发机器上。

Sidekiq documentation

传递给perform_async的参数必须由简单的JSON数据类型组成:string,integer,float,boolean,null,array和hash。 Sidekiq客户端API使用JSON.dump将数据发送到Redis。 Sidekiq服务器从Redis中提取JSON数据并使用JSON.load将数据转换回Ruby类型以传递给您的perform方法。 不要传递符号或复杂的Ruby对象(如日期或时间!),因为这些对象无法正确转储/加载往返。

传递id而不是object:

 def create ProjectsWorker.perform_async(current_user.id) end 

工人:

 class ProjectsWorker include Sidekiq::Worker def perform(user_id) u = User.find(user_id) @support = u.supports.build(support_params) end end