如何将 current_user 传递给 Sidekiq 的 Worker [英] How to pass current_user to Sidekiq's Worker

查看:66
本文介绍了如何将 current_user 传递给 Sidekiq 的 Worker的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to pass current_user or User.find(1) to a worker module but getting error in the sidekiq's dashboard (localhost:3000/sidekiq/retries):

NoMethodError: 未定义方法 `supports' for "#":String

NoMethodError: undefined method `supports' for "#":String

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

note: my relations are ok ie:

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

supports_controller.rb:

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

 ...

end

app/workers/projects_worker.rb:

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

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

Re-starting my sidekiq server makes no difference. This is on my development machine.

推荐答案

来自 Sidekiq 文档:

传递给 perform_async 的参数必须由简单的JSON 数据类型:字符串、整数、浮点数、布尔值、空值、数组和散列.Sidekiq 客户端 API 使用 JSON.dump 将数据发送到 Redis.这Sidekiq 服务器从 Redis 中提取 JSON 数据并使用 JSON.load将数据转换回 Ruby 类型以传递给您的执行方法.不要将符号或复杂的 Ruby 对象(如日期或时间!)作为那些将无法正确地承受转储/负载往返.

The arguments you pass to perform_async must be composed of simple JSON datatypes: string, integer, float, boolean, null, array and hash. The Sidekiq client API uses JSON.dump to send the data to Redis. The Sidekiq server pulls that JSON data from Redis and uses JSON.load to convert the data back into Ruby types to pass to your perform method. Don't pass symbols or complex Ruby objects (like Date or Time!) as those will not survive the dump/load round trip correctly.

传递一个 id 而不是对象:

Pass an id instead of 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

这篇关于如何将 current_user 传递给 Sidekiq 的 Worker的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆