我正在使用托管在 Heroku 上的Dragonfly和机架/缓存的组合。
我正在使用 Dragonfly 上传资产。缩略图被即时处理并存储在 rack/cache 中,以便从 memcached 快速交付(通过Memcachier 插件)。
常规静态资产也通过 rack/cache 缓存在 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 有 1MB 的限制,所以我可以理解为什么我的资产没有被缓存,但我宁愿它不会破坏服务资产。
我什至不确定这个错误来自哪里。大概来自其他机架中间件之一?
增加最大文件大小似乎没有任何影响。
config.cache_store = :dalli_store, ENV["MEMCACHIER_SERVERS"].split(","), {¬
:username => ENV["MEMCACHIER_USERNAME"],¬
:password => ENV["MEMCACHIER_PASSWORD"],¬
:value_max_bytes => 5242880 # 5MB¬
}
从长远来看,我知道将这种资产从 Heroku 中移出是明智之举,但这不会是一项快速的工作。
在此期间,我可以做些什么来在 Heroku 上提供这些资产而不会出现错误?