【问题标题】:What happens when a large resource creation request is timed out?大型资源创建请求超时怎么办?
【发布时间】:2016-07-29 17:59:52
【问题描述】:

假设我们有一个 PostsController 和一个 Post 模型,其中包含多个图像。

这些图像是在 after_save 回调中创建的。

现在我们有一个巨大的请求,其中包含 20 个编码图像,当回调处于执行过程中时会超时。

现在是什么状态?

  • 帖子是否存储在数据库中?

  • 在哪里创建了任何图像?

  • 如果图像是在before_save 回调中创建的,它会改变什么吗?

【问题讨论】:

  • 图片到底发生了什么?

标签: ruby-on-rails postgresql


【解决方案1】:

数据库事务将在after_commit 以外的任何回调中回滚。在提交数据库事务之前,它不会持久化到磁盘上。

如果假设在超时之前处理了一半的图像,那么将处理一半的图像。真的没有办法回滚。

这是available callbacks 的链接及其运行顺序。

最后,最好通过Active Job 异步运行图像处理,这样您就不太可能遇到超时问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2010-11-15
    • 2011-06-02
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多