ruby-on-rails - 如何异步处理 Rails 观察者和回调(在不同的线程中)?

标签 ruby-on-rails callback observer-pattern

Rails 模型上的观察者和回调在同一个线程上运行并阻止请求,直到它们返回。

例如,如果我有一个 Photo 模型并且我在 after_create 回调或观察者中对调整大小的作业进行排队,则在队列中创建一个条目之前,请求不会完成(如果我使用 Amazon SQS 进行排队,有时可能会很慢) )。

Rails Controller 上的回调也是如此。如果我必须运行诸如缓存管理或存储分析之类的维护,则请求在回调结束之前不会完成。

是否有 Rails 方法可以在不同线程中的回调(模型或 Controller )或观察者中运行代码,以便请求不会停止?

最佳答案

当前在请求/响应周期之外在后台运行代码的几种流行方法是 delayed_jobresque

delay_job 使用您的数据库来排队后台处理作业,而 resque 使用 Redis。

我已经使用了两者,它们都很好用,请阅读文档以了解哪种最适合您的情况。

这不会自动使您的观察者和回调在后台运行,但它可以很容易地做到这一点,等等。这种技术非常普遍,并且在 Rails 社区中经过了生产实战测试。

关于ruby-on-rails - 如何异步处理 Rails 观察者和回调(在不同的线程中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5082593/

相关文章:

ruby-on-rails - 为什么 ActiveRecord 在引发 StatementInvalid 错误后返回一个空数组?

javascript - 用coffeescript中的图像替换文本

javascript - 在 Ruby on Rails 中实现作业完成时的通知/警报弹出窗口

swing - 在 JavaFX GUI 设计中利用观察者模式

java - 是否建议使用带有 ResultSet 作为事件源的观察者模式?

ruby-on-rails - 设计 ensure_authentication_token 报告未定义的方法

java - ActionCable(Rails5) 和安卓客户端

javascript - 在 javascript 中使用预先分配的参数传递回调的更简单方法是什么?

node.js - 在从第一个导致未定义的数据中获取数据之前,我的第二个 promise 被调用。不确定我在做什么

mvvm - MonoTouch INotifyPropertyChanged 没有大框架