Este escrito ha sido evaluado por expertos así garantizamos la veracidad de este tutorial.
Solución:
Acabo de encontrarme con esto y parece un break
resolverá nuestros problemas. Acabo de probar esto localmente contra memory_store y dalli_store y evita el almacenamiento en caché del bloque. Entonces, para tu ejemplo, prueba algo como esto:
Rails.cache.fetch("key") do
api.get "/api/data"
break if api.body.meta.status == 500
api.body
end
Como nota al margen, si usa dalli_store, no almacenará en caché los valores nulos, por lo que puede devolver cero del bloque.
No usaría fetch, en este caso, y en la mayoría de los casos.
Fetch le permite tener en cuenta todos los casos de control de flujo utilizando el manejo de excepciones como su único mecanismo para el control de flujo (!).
En su lugar, use los métodos de lectura y escritura para el caché, usando el control de flujo normal que da como resultado el comportamiento que desea. Fetch es rápido y elegante, pero viene con un equipaje adicional con el que no estará contento una vez que tenga que admitir el software que escribió.