Ich verwende eine Kombination von Dragonfly und rack/cache auf Heroku gehostet.Wie können Dateien über 1 MB mit Rack/Cache auf Heroku zwischengespeichert werden?
Ich verwende Dragonfly für hochgeladene Assets. Thumbnails werden on-the-fly verarbeitet und im Rack/Cache für die schnelle Lieferung aus Memcached (über die Memcachier addon) gespeichert.
Reguläre statische Assets werden auch über Rack/Cache in memcached zwischengespeichert.
Mein Problem ist, dass alle hochgeladenen Dateien über 1 MB einen Fehler von 500 in meiner Anwendung verursachen.
2013-07-15T10:38:27.040992+00:00 app[web.1]: DalliError: Value too large, memcached can only store 1048576 bytes per key [key: d49c36d5db74ef45e957cf169a0b27b83b9e84de, size: 1502314]
2013-07-15T10:38:27.052255+00:00 app[web.1]: cache: [GET /media/BAhbBlsHOgZmSSIdNTA3Njk3ZWFiODBmNDEwMDEzMDAzNjA4BjoGRVQ/WTW_A5Flyer_HealthcareMedicalObsGynae_WEB.pdf] miss, store
2013-07-15T10:38:27.060583+00:00 app[web.1]: !! Unexpected error while processing request: undefined method `each' for nil:NilClass
Memcache hat eine Grenze von 1MB, so kann ich verstehen, warum wurde mein Asset nicht im Cache gespeichert, aber ich würde lieber es nicht brechen dienen Vermögen.
Ich bin 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.
config.cache_store = :dalli_store, ENV["MEMCACHIER_SERVERS"].split(","), {¬
:username => ENV["MEMCACHIER_USERNAME"],¬
:password => ENV["MEMCACHIER_PASSWORD"],¬
:value_max_bytes => 5242880 # 5MB¬
}
Langzeit, ich weiß, dass weg von Heroku diese Art des Vermögens bewegt, ist ein vernünftiger Schritt, aber das wird nicht eine schnelle Aufgabe.
Was kann ich tun, um diese Assets auf Heroku in der Zwischenzeit fehlerfrei zu beliefern?
diese Lösung funktionierte erfolgreich für mich. Vielen Dank! – Francois
FYI es gibt eine API zum Ändern der Header ohne Affe-Patching - siehe http://markevans.github.io/dragonfly/configuration/ ("response_header" Bit) –