【问题标题】:Ruby on Rails Resque perform paramters as hashRuby on Rails Resque 将参数作为哈希执行
【发布时间】:2016-05-14 06:27:44
【问题描述】:

我正在尝试编写一个 resque worker 来处理一些后台任务,例如群发电子邮件。

我希望我的工作人员接受参数散列:

class Worker
  @queue = :worker_queue

  def self.perform(options={})
    user_id = options[:user_id]
  end
end

我更喜欢self.perform(arg1, arg2, arg3, arg4, arg5)

一切都在控制台中运行(即Worker.perform(args))。但是,每当我将其排入 resque 时,参数都是未定义的。

ActiveRecord::RecordNotFound: Couldn't find User with 'id'=

谁能指出我正确的方向?我知道排队的参数被序列化为 JSON。

我只是想了一下,我的问题可能是符号:user_id 而不是'user_id',因为它是序列化的?

【问题讨论】:

    标签: ruby-on-rails ruby resque


    【解决方案1】:

    是的,没错。以下代码是罪魁祸首

    user_id = options[:user_id]
    

    具体来说,在哈希中使用符号 (:user_id) 可能会导致问题,因为当参数被序列化/反序列化时,您在 Resque 工作程序中获得的哈希包含所有作为字符串的键。

    你应该使用:

    user_id = options["user_id"]
    

    【讨论】:

      【解决方案2】:

      是的,我的怀疑是正确的!当序列化为 JSON 时,Ruby 符号将成为常规键字符串。

      当我用'user_id' 替换之前代码的符号后,一切都开始工作了!

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 1970-01-01
        • 2014-09-08
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        • 2014-04-30
        相关资源
        最近更新 更多