使用Sidekiq时,Date对象变为String

Sun*_*Cho 6 ruby ruby-on-rails sidekiq

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

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

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

它使用实例方法传递给Sidekiq worker perform_async.该perform方法是Sidekiq是调用在一个模型中的方法,通过它从服务到模型接收参数的一条线方法.

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

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

小智 22

当您perform_async在Sidekiq工作器上调用该方法时,提供的参数将转换为JSON,以便它们可以存储在Sidekiq后台工作者从中拉出的Redis队列中,然后从JSON转换回原始类型以perform在后台传递给它们工人流程.因此,最好将简单的参数传递给您的Sidekiq工作人员; 事实上,这是一种最佳实践.

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