使用 Sidekiq 时日期对象变成字符串

Date object turns into String when using Sidekiq

我有一个问题,当我将一些 Date 对象作为参数传递给不同的方法时,它们会变成 String

在我的 Rails 应用程序中,有一个服务调用 Sidekiq worker 来执行模型中的方法。

初始化服务对象时,它有Date个实例方法。我已经使用调试器确认了它们的类型。

它使用 perform_async 将实例方法传递给 Sidekiq worker。 perform 方法是 Sidekiq 是一种单行方法,它调用模型中的方法,将从服务接收的参数传递给模型。

在模型端,从Sidekiq worker传入的参数不再是Date类型。它们是 String(例如“2015-01-20”)。我已经使用 degugger 确认了这一点。

有没有想过为什么会这样?

当你在 Sidekiq worker 上调用 perform_async 方法时,提供的参数被翻译成 JSON 以便它们可以存储在 Sidekiq 后台 worker 从中拉取的 Redis 队列中,然后从 JSON 转换回原始类型,在后台工作进程中传递给 perform。因此,最好将简单的参数传递给您的 Sidekiq 工作人员;事实上,it's a best practice.

对于您的特定问题,您可以将传递到工作人员执行方法的日期并使用 Date.parse(date_string) 将其转回 Date 对象。在这种情况下,您可能还想在 perform_async 的参数上调用 to_s,只是为了让您的代码的任何后来读者清楚地知道传递给 perform 的是一个字符串.