0

我正在尝试学习如何在 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 处理是在后台处理的,我是否需要通过某种缓存过程来处理这个问题,或者是否可以直接访问变量?

4

2 回答 2

0

您需要将该数据存储在您的数据库、mongo、redis 等中。您将无法直接访问,因为该作业是在单独的进程中执行的(一旦完成就会被销毁)。

于 2013-01-24T18:37:00.593 回答
0

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

如何从 Rails 工作人员将值存储在 memcached 存储中

于 2013-01-24T19:14:23.227 回答