我们的 Rails Web 应用程序必须根据请求从 ftp 下载/解压缩包含 html 页面的档案,以便用户通过浏览器查看。
存档可能非常大,因此用户必须等到它在服务器上下载/解压缩。
我以在用户请求中调用 fork/Process.detach 的方式实现了进度条,以便他的请求完成,但下载/解包过程继续在后台运行。并且在他的浏览器中呈现的 javascript 会 ping 我们的服务器以获取状态,直到一切准备就绪,然后它将他重定向到解压缩的 html 页面。
只要用户请求一个存档,一切都会顺利进行,但如果他尝试同时运行 2 个或更多请求(以便启动更多分叉),似乎只有一个完成,其余的过期/次出局/被乘客杀死(?)。我想这是乘客/分叉的问题。
我不确定是否可以以某种方式修复它,所以我想我需要切换到另一个解决方案。该解决方案需要允许立即并行处理下载。因此,如果用户请求多个档案,他必须同时查看所有档案的下载/解压缩进度。
我正在考虑立即运行后台 rake 作业,但启动起来似乎很慢(我们的服务器上每分钟都会发生很多 cron rake 任务)。我喜欢 fork 的原因是它的启动速度非常快。我知道有延迟的工作,我们也大量使用它来完成其他任务。但是它可以在没有队列的情况下立即同时启动多个进程吗?