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

Ruby on rails 如何异步处理Rails观察器和回调(在不同的线程中)?,ruby-on-rails,callback,observer-pattern,Ruby On Rails,Callback,Observer Pattern,Rails模型上的观察器和回调在同一线程上运行,并阻止请求,直到它们返回 例如,如果我有一个照片模型,并且我在after_create回调或observer中对一个调整大小的作业进行排队,那么直到在队列中输入一个条目,请求才会完成(如果我使用Amazon SQS进行排队,这有时会很慢) Rails控制器上的回调也是如此。如果我必须运行诸如缓存管理或存储分析之类的维护,则在回调结束之前,请求不会完成 有没有一种Rails方法可以在不同线程中的回调(模型或控制器)或观察者内部运行代码,这样请求就不会

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

例如,如果我有一个照片模型,并且我在after_create回调或observer中对一个调整大小的作业进行排队,那么直到在队列中输入一个条目,请求才会完成(如果我使用Amazon SQS进行排队,这有时会很慢)

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


有没有一种Rails方法可以在不同线程中的回调(模型或控制器)或观察者内部运行代码,这样请求就不会停止?

在请求/响应周期之外的后台运行代码的两种常用方法目前是

delayed_作业使用数据库将后台处理作业排队,resque使用Redis

我用过这两种方法,它们都很有效,请阅读文档,看看哪种方法最适合您的情况


这不会自动使您的观察者和回调在后台运行,但它使这一点变得非常容易,甚至更多。这项技术在Rails社区得到了广泛的应用和测试。

谢谢,好主意。我使用AmazonSQS将延迟作业或resque的功能外包出去,这样我就不必在使用延迟作业时不断ping我的数据库,也不必在使用resque时设置redis。Amazon SQS工作得非常出色,但有时在重新连接到SQS服务器时会出现轻微延迟。另外,请查看最快的,如果您需要,它会提供商业支持。