2016-07-29 16 views
0

Nehmen wir an, wir haben ein PostsController und ein Post Modell, das mehrere Bilder hat. Diese Bilder werden in einem after_save Callback erstellt.Was passiert, wenn eine große Ressourcenerstellungsanforderung abgelaufen ist?

Jetzt haben wir eine riesige Anfrage, die mit 20 kodierten Bildern kommt, die Zeit aus, wenn der Rückruf mitten in seiner Ausführung ist.

Wie ist der Zustand jetzt?

  • Ist der Post in der DB gespeichert?

  • Wo wurden Bilder erstellt?

  • Ändert es irgendetwas, wenn die Bilder in einem before_save Callback erstellt werden?

+0

Was genau passiert mit den Bildern? –

Antwort

0

Die Datenbanktransaktion würde andere als after_commit wieder in einem der Rückrufe gerollt werden. Solange die Datenbanktransaktion nicht festgeschrieben ist, wird sie nicht auf der Festplatte gespeichert.

Wenn wir sagen, dass die Hälfte der Bilder vor dem Timeout verarbeitet wurde, dann würde diese Hälfte der Bilder verarbeitet werden. Es würde keine Möglichkeit geben, das wirklich zurückzurollen.

Hier ist ein Link zu der available callbacks und der Reihenfolge, die sie ausführen.

Schließlich ist es wahrscheinlich am besten, die Bildverarbeitung asynchron über Active Job zu starten, so dass es weniger wahrscheinlich zu Timeout-Problemen kommt.