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