通知用户 PDF 创建已准备就绪,可以下载
Notify users PDF creation is ready and can be downloaded
用户可以在我的应用程序中创建 PDF,这需要一些时间才能生成,因此必须在后台作业中完成。没问题,但是会有延迟,必须通知用户 PDF 已准备就绪。
所以第一个选择是发送带有下载内容的电子邮件 link 或应用本身的推送通知。我的偏好是推送通知,所以我想 ActionCable 是可行的方法吗?我的应用程序在 Heroku 上运行,那么 ActionCable 也是一个不错的选择还是其他解决方案更可取?
那么还有一个考虑,生成的PDF存放在哪里,等用户下载了呢?我可以使用 ActiveStorage 将它上传到 Azure/S3/etc,或者我可以将它暂时存储在应用程序文件夹中并在下载后删除它。我的偏好是最后做,因为 PDF 只存在几分钟,因此真的不需要将它存储在云中的麻烦吗?
你的问题很宽泛,这在很大程度上取决于你希望他们拥有的整体用户需求和体验。
我将从最简单的部分开始,即 PDF 的临时存储。这里有几点需要牢记。
我想说,从可扩展性和应用程序安全的角度来看,将 PDF 存储到云端是可行的方法。打开应用程序服务器上的 writable 目录存在风险。此外,如果您需要扩展到多个服务器,这将不起作用。使用适当的 API 从云存储中删除项目并不困难。
下载 PDF 是否必须以某种方式对用户进行身份验证?如果将 PDF 推送到云存储桶(除非您使用非常复杂、无法猜测的名称命名 PDF,该名称只能通过经过身份验证的应用程序访问),这会更具挑战性。如果数据不太敏感,那么您的电子邮件通知可以直接显示 link,但您不会轻易知道用户是否已检索到 PDF 并且现在可以删除它。
就通知而言,出于多种原因我会选择电子邮件。简单是主要的。您有使用 ActionCable 的经验吗?它表面上看起来很简单,但在使用它时有很多事情要记住:基础设施和 UI 是主要的。另外,从用户体验的角度来看,用户是否可能会在应用程序中徘徊等待 PDF 完成?如果他们注销会怎样?他们如何知道 PDF 可用?
如果生成 PDF 的时间尺度很短并且绝对优化的可伸缩性不是什么大问题,您可以考虑一种更简单的机制来检查用户通知(对 user_notifications [=26 的简单查询=] 例如)对于每个用户操作,并使用 UI 可以检查并用于异步检索通知的 flash 或其他一些会话标志。
只是想法。无法给出明确的答案。
用户可以在我的应用程序中创建 PDF,这需要一些时间才能生成,因此必须在后台作业中完成。没问题,但是会有延迟,必须通知用户 PDF 已准备就绪。
所以第一个选择是发送带有下载内容的电子邮件 link 或应用本身的推送通知。我的偏好是推送通知,所以我想 ActionCable 是可行的方法吗?我的应用程序在 Heroku 上运行,那么 ActionCable 也是一个不错的选择还是其他解决方案更可取?
那么还有一个考虑,生成的PDF存放在哪里,等用户下载了呢?我可以使用 ActiveStorage 将它上传到 Azure/S3/etc,或者我可以将它暂时存储在应用程序文件夹中并在下载后删除它。我的偏好是最后做,因为 PDF 只存在几分钟,因此真的不需要将它存储在云中的麻烦吗?
你的问题很宽泛,这在很大程度上取决于你希望他们拥有的整体用户需求和体验。
我将从最简单的部分开始,即 PDF 的临时存储。这里有几点需要牢记。
我想说,从可扩展性和应用程序安全的角度来看,将 PDF 存储到云端是可行的方法。打开应用程序服务器上的 writable 目录存在风险。此外,如果您需要扩展到多个服务器,这将不起作用。使用适当的 API 从云存储中删除项目并不困难。
下载 PDF 是否必须以某种方式对用户进行身份验证?如果将 PDF 推送到云存储桶(除非您使用非常复杂、无法猜测的名称命名 PDF,该名称只能通过经过身份验证的应用程序访问),这会更具挑战性。如果数据不太敏感,那么您的电子邮件通知可以直接显示 link,但您不会轻易知道用户是否已检索到 PDF 并且现在可以删除它。
就通知而言,出于多种原因我会选择电子邮件。简单是主要的。您有使用 ActionCable 的经验吗?它表面上看起来很简单,但在使用它时有很多事情要记住:基础设施和 UI 是主要的。另外,从用户体验的角度来看,用户是否可能会在应用程序中徘徊等待 PDF 完成?如果他们注销会怎样?他们如何知道 PDF 可用?
如果生成 PDF 的时间尺度很短并且绝对优化的可伸缩性不是什么大问题,您可以考虑一种更简单的机制来检查用户通知(对 user_notifications [=26 的简单查询=] 例如)对于每个用户操作,并使用 UI 可以检查并用于异步检索通知的 flash 或其他一些会话标志。
只是想法。无法给出明确的答案。