我正在使用在Heroku上托管的Dragonfly和rack/cache的组合。
我使用Dragonfly上传资产。缩略图是即时处理的,并存储在rack/cache中,以便通过Memcachier addon从memcached快速交付。
常规静态资产也通过rack/cache在memcached中缓存。
我的问题是,任何超过1MB的上传文件都会导致应用程序出现500错误。
Memcache有1MB的限制,所以我可以理解为什么我的资源没有被缓存,但我希望它不会影响服务资产。
我甚至不确定这个错误来自哪里。可能是其他rack中间件之一吗?
增加最大文件大小似乎没有任何影响。
我使用Dragonfly上传资产。缩略图是即时处理的,并存储在rack/cache中,以便通过Memcachier addon从memcached快速交付。
常规静态资产也通过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的限制,所以我可以理解为什么我的资源没有被缓存,但我希望它不会影响服务资产。
我甚至不确定这个错误来自哪里。可能是其他rack中间件之一吗?
增加最大文件大小似乎没有任何影响。
config.cache_store = :dalli_store, ENV["MEMCACHIER_SERVERS"].split(","), {¬
:username => ENV["MEMCACHIER_USERNAME"],¬
:password => ENV["MEMCACHIER_PASSWORD"],¬
:value_max_bytes => 5242880 # 5MB¬
}
长期来看,我知道将这种资产从Heroku移出是一个明智的举动,但这不会是一个快速的工作。
在此期间,我该如何在Heroku上提供这些资产而不出现错误?
config.cache_store =:dalli_store
在environments/development.rb
中打开dalli。您能否在此处指定value_max_bytes的值?谢谢。 - Zack Xuconfig.cache_store = :dalli_store, ENV['MEMCACHIER_SERVERS'], { :value_max_bytes => 1048760 }
- David Terei