我正在使用Sinatra
编写一个终点,我将从客户端接收原始pdf,并需要处理pdf以供内部使用。现在pdf处理需要一段时间,我不一定希望客户端等到处理完成并冒timeout
(504
)的风险。相反,当我用适当的代码回复客户端时,想要调用另一个处理pdf处理的方法。使用Sinatra实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
所以这里有几个部分,所以让我分解将要发生的各个步骤:
解决后者这些问题,操纵或处理上传资产的典型方法是使用后台作业队列,例如Sidekiq(http://sidekiq.org)。您将所需数据存储在某处,保留足够的信息以了解要处理的内容(例如,存储相关信息的模型的数据库ID,文件名等),然后将所有必需的信息传递到后台工作。然后,您可以使用单独的工作流程来完成工作并完成工作,但它们不属于您的Web流程,因此它们不会阻止其他客户端接收信息。
这仍然让我们处理大型上传的问题,幸运的是,它也有解决方案。利用亚马逊拥有的所有网络容量,并让客户端将文件直接上传到S3,当它完成时,他们可以只发布文件名给你,然后你可以从上一步将它排队到你的工作人员并拥有它一切都发生在后台。这篇博客文章很好地解释了如何使用Paperclip http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and
将它连接在一起