当前位置:  开发笔记 > 后端 > 正文

如何将current_user传递给Sidekiq的Worker

如何解决《如何将current_user传递给Sidekiq的Worker》经验,为你挑选了1个好方法。

我试图传递current_user或传递User.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服务器没有任何区别.这是在我的开发机器上.



1> Зелёный..:

来自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对象(如Date或Time!),因为这些对象无法在转储/加载往返中正常运行.

传递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

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有