Rails updating/modifying 使用后台作业时动态查看

Rails updating/modifying the view dynamically while using background jobs

有没有办法从后台作业更新或修改视图?例如,如果用户想要发送 100 封电子邮件,我想通过视图向用户显示后台作业的进度。第一封邮件发送后,显示 1/100,第二封,2/100,依此类推

我不知道这是否重要,但我正在使用 delayed_job。

如果您明确希望服务器成为页面更新的来源,那么您应该查看 actioncable,它是 websockets 的 Rails 实现(rails 5.0 的一部分,可用 as a gem 对于以前的版本)

原理 : 客户端下达发送100封邮件的命令时,订阅一个频道SendMailChannel。每当服务器上的作业 运行 发送邮件时,它都会通过 SendMailChannel 向所有订阅者广播此信息。然后,您可以在咖啡脚本中使用此信息来更新页面并相应地显示计数器。

如果您的唯一目的是更新计数器,考虑到必须完成的所有配置(作业开发 + 频道 + 用于订阅和更新的 coffeescript 操作 + 可能更改您的服务器到像 Puma 这样的线程服务器。

每 10 秒左右进行一次 ajax 更新会增加网络负担,降低效率和通用性,但更容易实现。