我有兴趣在将页面刷新到客户端之后在Rails中运行一些服务器端代码(类似于问题asked here for Django)。可以说,我正在寻找的功能相当于Rails的Django's request_finished signal。
我发现ActiveRecord的回调支持(它对数据库的持久性,而不是请求状态),以及推迟长期运行任务的工具,这些任务旨在让页面响应完成(但是只有在将页面刷新到客户端之后才能支持启动该任务。
[直接用例是处理用户请求的操作,该操作可能会中断正在运行的服务;目标是在继续执行破坏性操作之前将当前页面发送给客户端,而不会出现任何容易出现竞争的情况,并且通常会将其视为硬编码延迟。
我试图完成的是什么?我的目标是Rails 4.x。
答案 0 :(得分:0)
如果你可以使用Javascript,那么你可以这样做:
function pageLoadCallback(){
$.ajax({
// tell server to do something now that the page is loaded
})
}
$(document).ready(function(){
pageLoadCallback();
});
答案 1 :(得分:-1)
看一下https://github.com/celluloid/celluloid,了解你要做的事情的起点,基本上(据我所知)你有一个需要很长时间才能入队并且你希望延迟到你完成对客户的请求之后......
两种常见的方法:
Thread.new { HeavyWeightTask.new.enqueue }
- (很简单的生活和死亡)include Celluloid
在任务类中,然后调用HeavyWeightTask.new.async.enqueue
(也很简单,但使用线程池)