我想傳遞請求引數,以便我可以在 delay_job 上執行它,如下所示:
ObserveJob.perform_later(request)
但錯誤始終是 ActiveJob::SerializationError: Unsupported argument type: ActionDispatch::Request
有沒有辦法在rails中傳遞這個內置的請求引數,以便使用delayed_job正確執行?
uj5u.com熱心網友回復:
而不是傳遞整個request物件——這是相當大和復雜的——只傳遞你實際需要的屬性給作業。這有幾個優點:
- 像您的問題一樣,巨大、復雜和嵌套的物件
request很難序列化,甚至可能根本不支持序列化。 - 非常“基本”類的簡單物件,如數字或字串,更容易序列化,并且在其序列化表示中需要更少的記憶體,最終使您的作業更快。
- 將復雜物件傳遞給只需要某些屬性的作業會給對作業的請求添加不必要的依賴性。作業需要知道請求物件是如何作業的,以及如何從該物件中獲取所需的屬性。
- 將簡單物件傳遞給方法使測驗更容易,因為您不需要構建復雜的東西來測驗方法。
我會將perform方法更改為
def perform(path:, referer:, url: remote_ip:, user_agent:, location:)
# ...
end
并這樣稱呼它:
ObserveJob.perform_later(
path: request.path,
referer: request.referer,
url: request.url,
remote_ip: request.remote_ip,
user_agent: request.user_agent,
location: request.location
)
uj5u.com熱心網友回復:
可以有很多方法:
Delayed::Job.enqueue(Abc.new(param1, param2, queue: "Update Derive")
延遲的作業將是這樣的:
class Abc < Struct.new(:param1, :param2)
def perform
sum = param1 param2
...
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468134.html
標籤:轨道上的红宝石 红宝石 延迟工作 rails-activejob
上一篇:Rails7:如何將變數從一個控制器傳遞到下一個控制器
下一篇:沒有命名空間前綴的命名路由
