当我直接调用方法时,一切正常:
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
的日志显示没有值。它或我的错误是什么?
答案 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对象(比如日期或时间!),因为这些对象无法正常转储/加载往返。