当通过Sidekiq worker传递给方法时,哈希元素为nil

时间:2016-03-02 06:05:51

标签: ruby-on-rails sidekiq

当我直接调用方法时,一切正常:

InitPhotoWorker.perform_async(group_id: @group.id, owner_id: @group.owner_id, user: current_user.id)

但是当我通过Sidekiq工作者调用这个方法时会发生一些奇怪的事情:

class InitPhotoWorker
  include Sidekiq::Worker
  sidekiq_options retry: 3, :queue => :critical
  Sidekiq::Logging.logger.level = Logger::DEBUG

  def perform(photo_params)
    Photo.new.init_albums_comments(photo_params)
  end
end

工人

def init_albums_comments(photo_params)
    Rails.logger.debug "#{photo_params}"
    Rails.logger.debug "#{photo_params[:owner_id]}"
...
end

方式:

{"group_id" => "1", "owner_id" => "54454545", "user_id" => "1"}

在我的日志中,我看到hash photo_params没问题::owner_id 但是哈希键index.php的日志显示没有值。它或我的错误是什么?

1 个答案:

答案 0 :(得分:1)

你的哈希似乎有字符串键:

Rails.logger.debug "#{photo_params['owner_id']}"

来自Sidekiq文档:

传递给perform_async的参数必须由简单的JSON数据类型组成:string,integer,float,boolean,null,array和hash。 Sidekiq客户端API使用JSON.dump将数据发送到Redis。 Sidekiq服务器从Redis中提取JSON数据并使用JSON.load将数据转换回Ruby类型以传递给您的perform方法。不要传递符号或复杂的Ruby对象(比如日期或时间!),因为这些对象无法正常转储/加载往返。