我正在尝试学习如何在 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处理是在后台处理的,我是否需要使用某种缓存过程来处理这个问题,或者是否可以直接访问变量?
如果你需要做的就是存储一个变量,你可以把它添加到memcache中。如果您已经在 Rails 应用程序中使用缓存,那将是不错的选择。您可以参考另一个问题,它讨论了使用 memcache 来存储稍后在控制器中访问的变量。
如何将来自 rails worker 的值存储在 memcached 存储中
您需要将这些数据存储在数据库,mongo,redis等中,您将无法直接访问,因为作业是在单独的进程中执行的(一旦完成就会销毁)。