使用Sidekiq时,Date对象变为String

时间:2015-04-09 23:47:22

标签: ruby-on-rails ruby sidekiq

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

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

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

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

在模型方面,从Sidekiq工作者传入的参数不再是Date类型。它们是String(例如" 2015-01-20")。我已经使用degugger证实了这一点。

有关为何发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:21)

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

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