我正在尝试将current_user
或User.find(1)
传递给工作模块,但在sidekiq的信息中心(localhost:3000 / sidekiq / retries)中收到错误:
NoMethodError:未定义的方法`支持' for"#":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服务器没有任何区别。这是在我的开发机器上。
答案 0 :(得分:7)
传递给perform_async的参数必须由simple组成 JSON数据类型:字符串,整数,浮点数,布尔值,空值,数组和哈希值。 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