Wie können Dateien über 1 MB mit Rack / Cache auf Heroku zwischengespeichert werden?

8

Ich verwende eine Kombination aus Dragonfly und Rack / Cache auf Heroku gehostet.

Ich verwende Dragonfly für hochgeladene Assets. Thumbnails werden on-the-fly verarbeitet und im Rack / Cache für eine schnelle Lieferung von Memcached gespeichert (über das Memcachier-Addon ). p>

Reguläre statische Assets werden auch in memcached über Rack / Cache zwischengespeichert.

Mein Problem ist, dass hochgeladene Dateien über 1 MB in meiner Anwendung einen Fehler von 500 verursachen.

%Vor%

Memcache hat ein Limit von 1 MB, daher kann ich verstehen, warum mein Asset nicht zwischengespeichert wurde, aber ich würde es lieber nicht nutzen.

Ich bin mir nicht einmal sicher, woher dieser Fehler kommt. Vermutlich von einem der anderen Rack Middleware?

Das Erhöhen der maximalen Dateigröße scheint keine Auswirkungen zu haben.

%Vor%

Langfristig weiß ich, dass das Verschieben dieser Art von Vermögen von Heroku ein vernünftiger Schritt ist, aber das wird keine schnelle Aufgabe sein.

Was kann ich tun, um diese Assets auf Heroku in der Zwischenzeit fehlerfrei zu beliefern?

    
jordelver 15.07.2013, 14:42
quelle

3 Antworten

7

Ich hatte das gleiche Problem wie @jordelver und schaffte es, die Limits von memcachier durch Affen-Patching zu umgehen Dragonfly::Response :

%Vor%

Wenn die Größe mehr als 1048576 Byte beträgt, senden Sie im Wesentlichen einen No-Cache-Header.

    
aaronrussell 08.10.2013, 15:59
quelle
9

Im Gegensatz zur Frage von @ jordelver finde ich, dass das Einstellen der Option :value_max_bytes von dalli funktioniert. Ich richte Rack :: Cache auf eine etwas andere Weise ein, die vielleicht den Unterschied macht.

Dies ist, was mein production.rb enthält, um Rack :: Cache zu konfigurieren:

%Vor%

Mit dem obigen werden einige Fehler in den Protokollen für Werte über 1 MB ausgegeben, aber sie verursachen keinen 5xx Fehler für den Client, nur einen Cache-Fehler.

P.S Ich arbeite für MemCachier :) also sind wir daran interessiert, dies zu klären. Bitte lass es mich wissen, wenn es funktioniert.

    
David Terei 17.09.2013 22:26
quelle
0

Mein application.js war zu groß für rack-cache , also tat ich:

%Vor%

Und es funktioniert!

Speichert Metadaten in Memcache, aber die eigentliche Datei im Dateisystem und nicht im Speicher.

    
Dorian 12.09.2014 17:47
quelle