使用Clockwork,我会定期从我的数据库中提取对象并将它们传递给Sidekiq工作人员进行处理。如果我在将对象传递给Sidekiq工作者之前检查它们,我会看到它们拥有的所有字段。但是,在我传递它之后检查对象给出了我所假设的对象的引用。
发条功能
every(30.seconds, 'check_modems.job'){
modem_list = Modem.all
modem_list.each do |modem|
TestWorker.perform_async(modem)
puts(modem.inspect)
end
}
上面的看跌期权的输出:
<Object id: 1, value: "15", ipaddress: nil>
我的工作函数接收对象:
def perform(test)
puts(test.inspect)
end
和输出:
#<Object:0x00563977f06f48>"
从我能够找到的内容来看,Ruby是按值传递的,在这种情况下该值是一个引用,但是如何从此处向后移动并获得我需要的对象?
答案 0 :(得分:3)
当您只传递简单标识符(例如易于序列化的数字或字符串)而不是复杂对象时,您的代码会更强大。
将clockwork
功能更改为以下内容:
modem_ids = Modem.pluck(:id)
modem_ids.each { |id| TestWorker.perform_async(id) }
你的工作人员:
def perform(modem_id)
modem = Modem.find_by(id: modem_id)
if modem
# ...
end
end