将对象传递给Resque作业是否安全?

Chr*_*ini 7 backgroundworker resque ruby-on-rails-3

将对象传递给Resque作业是否安全?例如:

Resque.enqueue(Foobar, @foo, @bar)
Run Code Online (Sandbox Code Playgroud)

代替:

Resque.enqueue(Foobar, @foo.id, @bar.id)
Run Code Online (Sandbox Code Playgroud)

如果我传递对象,有什么不利之处吗?

Ser*_*sev 11

Resque github页面说(https://github.com/defunkt/resque)

...您的作业必须只接受可以进行JSON编码的参数.

此外,您应该考虑一个效果:您传递的对象被复制.比方说,它是数据库中的记录.如果以后,当作业执行时,该对象在数据库中被更改,作业将不会被注意到,它将在自己的副本上运行.根据您的要求,这可能是期望的行为,或者可能不是.

如果您传递id该对象的一个,则可以在作业中检索它的最新版本.