将对象作为对象中的参数发送

send object as parameter in resque

抱歉我的新手问题。

我正在发送 current_user 具有用户对象类型作为 resque job runner 参数的帮助程序

      JobRunner.run LikerCommenterAnalyzerJob, current_user, session['basic_instagram_data']['access_token'], 505

但是当我尝试在 resque 的执行方法中获取 current_user 参数时,它更改为哈希类型

def self.perform (current_user, access_token, archive_id)

account = current_user.InstagramAccount.where('access_token', access_token).first

end

我的错误是

undefined method `InstagramAccount' for #<Hash:0x007f9e39c27458>

基本上,当您将任务推送到 resque 时,它​​将稍后存储到 运行 的某处(例如 Redis)。所以它不能存储你的对象,它只是存储你传递的参数的描述,上面的Hash是描述。

然后Resque将描述下拉到运行即可。

因此解决方案是,将您用来检索对象的信息改为放置(这是最佳做法)

推送任务时:

JobRunner.run LikerCommenterAnalyzerJob, current_user.id, session['basic_instagram_data']['access_token'], 505

当运行执行任务时

def self.perform (user_id, access_token, archive_id)
  user = User.find(user_id)
  account = user.InstagramAccount.where('access_token', access_token).first
end