如何在控制器方法中访问delayed_jobs结果对象?

时间:2013-01-24 18:24:40

标签: ruby-on-rails ruby-on-rails-3 delayed-job

我正在尝试学习如何在Rails中使用delayed_jobs,卸载长时间运行的Web请求进程,并将结果存储为我稍后可以在代码中访问的变量。这样做的最佳方式是什么?

在我的控制器代码中的方法中,我正在使用:

Delayed::Job.enqueue(BuildDetail.new)

然后我在lib / build_detail.rb中定义一个类(并且需要控制器中的文件):

class BuildDetail

  def perform
    ...
    # some web request processing is here
    ...
    # the code returns the results of the web request processing as a variable:
    @newvar = ...
  end   

end

所以这是我的挑战,我需要能够访问@newvar值以在另一个控制器方法中使用。我完全不明白如何引用@newvar值。由于delayed_jobs处理是在后台处理的,我是否需要通过某种缓存过程来处理它,或者是否可以直接访问变量?

2 个答案:

答案 0 :(得分:0)

您需要将数据存储在数据库,mongo,redis等内容中,因为作业是在一个单独的进程中执行的(并且在完成后会被销毁),因此无法直接访问。

答案 1 :(得分:0)

如果你需要做的只是存储一个变量,你可以将它添加到memcache。如果您已经在Rails应用程序中使用缓存,那将是一个很好的选择。您可以参考另一个讨论使用memcache存储变量的问题,该变量稍后在控制器中访问。

How to store a value in memcached store from a rails worker