【问题标题】:Sidekiq mailer can't find tableSidekiq 邮件程序找不到表
【发布时间】:2014-11-07 17:26:21
【问题描述】:

我正在尝试使用 Sidekiq 和 Ruby on Rails 在后台执行一些更新。但是我遇到了一个奇怪的问题

当我将对象 ID 传递给工作人员时,我收到“找不到表任务”错误

这是我的代码,例如:

class PygmentsWorker
  include Sidekiq::Worker

  def perform(task_id)
    task = Task.find(task_id)
    task.update_attribute(:body, "well...")
  end
end

保存后我打电话给工人。

@task = Task.new(task_params)
respond_to do |format|
  if @task.save
    PygmentsWorker.perform_at(1.minute.from_now, @task.id)

【问题讨论】:

  • 你重启你的sidekiq和你的服务器了吗?甚至可能重新启动redis。这就是我要开始的
  • @TheChamp 是的。几次
  • 嗯好的,在你的控制台中这工作正常吗?传递的参数是什么?是整数吗?
  • @TheChamp 是的,我传递了一个 ID
  • 可以肯定的是,您可以从控制台调用Task.find(id) 吗?因为也许迁移没有工作或……

标签: ruby-on-rails ruby ruby-on-rails-4 sidekiq


【解决方案1】:

当你创建一个Sidekiq任务时,一些任务信息会存储在redis存储中(默认),记住redis不能存储ruby实例,所以如果你创建一个带有对象实例参数的任务,所有的都会被转换成字符串对象消失了。

所以如果你想调用某个对象实例,最好传递字符串或数字,然后再次在worker中创建或查找对象。

【讨论】:

  • 一旦我遇到这个问题,看到sidekiq中的错误数据空闲所有工作参数都变成了字符串,当调用任务时,错误发生了。如果您坚持传递对象,我认为Marshal 可能可用。
【解决方案2】:

我很傻。我不小心在生产环境中启动了 Sidekiq,而在开发中启动了 Rails。

【讨论】:

  • 没有问题,很高兴现在解决了。有时真的很沮丧,不知道问题是什么:)
猜你喜欢
  • 2013-09-18
  • 2013-03-31
  • 2013-11-26
  • 2016-07-03
  • 2018-01-18
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多