Heroku でホストされているDragonflyとラック/キャッシュの組み合わせを使用しています。
アップロードされたアセットに Dragonfly を使用しています。サムネイルはオンザフライで処理され、memcached から ( Memcachier アドオンを介して) 高速に配信されるようにラック/キャッシュに保存されます。
通常の静的アセットも、ラック/キャッシュ経由で memcached にキャッシュされます。
私の問題は、アップロードされたファイルが 1MB を超えると、アプリケーションで 500 エラーが発生することです。
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 には 1 MB の制限があるため、アセットがキャッシュされなかった理由は理解できますが、アセットの提供が中断されないようにしたいと考えています。
このエラーがどこから来ているのかさえわかりません。おそらく他のラックミドルウェアの1つからですか?
最大ファイル サイズを大きくしても、影響はないようです。
config.cache_store = :dalli_store, ENV["MEMCACHIER_SERVERS"].split(","), {¬
:username => ENV["MEMCACHIER_USERNAME"],¬
:password => ENV["MEMCACHIER_PASSWORD"],¬
:value_max_bytes => 5242880 # 5MB¬
}
長期的には、この種のアセットを Heroku から移動するのは賢明なことですが、すぐにできることではありません。
その間、Heroku でこれらのアセットをエラーなく提供するにはどうすればよいですか?