Rails 模型上的观察者和回调在同一个线程上运行并阻止请求,直到它们返回。
例如,如果我有一个 Photo 模型并且我在 after_create 回调或观察者中对调整大小的作业进行排队,则在队列中创建一个条目之前,请求不会完成(如果我使用 Amazon SQS 进行排队,有时可能会很慢) )。
Rails Controller 上的回调也是如此。如果我必须运行诸如缓存管理或存储分析之类的维护,则请求在回调结束之前不会完成。
是否有 Rails 方法可以在不同线程中的回调(模型或 Controller )或观察者中运行代码,以便请求不会停止?
最佳答案
当前在请求/响应周期之外在后台运行代码的几种流行方法是 delayed_job和 resque
delay_job 使用您的数据库来排队后台处理作业,而 resque 使用 Redis。
我已经使用了两者,它们都很好用,请阅读文档以了解哪种最适合您的情况。
这不会自动使您的观察者和回调在后台运行,但它可以很容易地做到这一点,等等。这种技术非常普遍,并且在 Rails 社区中经过了生产实战测试。
关于ruby-on-rails - 如何异步处理 Rails 观察者和回调(在不同的线程中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5082593/