Rails模型上的观察者和回调函数在同一个线程上运行并阻止请求,直到它们返回。
例如,如果我有一个Photo模型并且我在after_create回调或观察者中排队调整大小的作业,那么在队列中输入一个条目之前请求就不会完成(如果我使用亚马逊,有时会很慢)排队的SQS)。
对于Rails控制器上的回调也是如此。如果我必须运行缓存管理或存储分析等维护,则在回调结束之前请求不会完成。
是否有Rails方法在回调(模型或控制器)中运行代码或在另一个线程中运行观察者,以便请求不会停止?
答案 0 :(得分:2)
目前在请求/响应周期中在后台运行代码的两种常用方法是delayed_job和resque
delayed_job使用您的数据库排队后台处理作业,resque使用Redis。
我已经使用了两者并且它们都很好用,请阅读文档以了解哪种文档最适合您的情况。
这不会自动使你的观察者和回调在后台运行,但这样做很容易,甚至更多。这种技术非常普遍,生产在Rails社区进行了战斗。