Re: bugreport: при чтении из memcached препендятся случайные символы

TDz TDz tdz at modestus.org
Tue Jun 5 21:43:45 MSD 2007


Спасибо большое, мы паралельно пришли к похожему решению. Странно что
разработчики RoR ещё не сделали встроенную опцию для этого, неотключаемая
фича есть баг. Думаю это можно смело добавить в FAQ nginx благо
использование его для Ruby становится всё более популярным

2007/6/5, Alexey Kovyrin <alexey at kovyrin.net>:
>
> On 6/4/07, TDz TDz <tdz at modestus.org> wrote:
> > В RoR есть вроде спец опция отключающая его механизмы оптимизации работы
> с
> > мемкешд после чего он должен писать без выкрутасов. Дебагали след
> образом -
> > мемкеш демон запущен с -vv чтоб видеть запросы и ответы, запросы давали
> > правда вместо telnet по nc вроде. В общем получается что nginx выдаёт
> > приблизительно то же что и nc, попробую ковырять API рубивское
>
> Решение:
>
> 1. Скопировать memcache_util.rb в lib
>
> 2. добавить require RAILS_ROOT + '/lib/memcache_util.rb'  в environment.rb
> до CACHE = MemCache.new
>
> 3. поправить memcache_util
>
> def self.get(key, expiry = 0, raw = false)
>     start_time = Time.now
>     value = CACHE.get key, raw
>     elapsed = Time.now - start_time
>     ActiveRecord::Base.logger.debug('MemCache Get (%0.6f)  %s' % [elapsed,
> key])
>     if value.nil? and block_given? then
>       value = yield
>       put key, value, expiry
>     end
>     value
>   rescue MemCache::MemCacheError => err
>     ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
>     if block_given? then
>       value = yield
>       put key, value, expiry
>     end
>     value
>   end
>
>   ##
>   # Sets +value+ in the cache at +key+, with an optional +expiry+ time in
>   # seconds.
>
>   def self.put(key, value, expiry = 0, raw = false)
>     start_time = Time.now
>     CACHE.set key, value, expiry, raw
>     elapsed = Time.now - start_time
>     ActiveRecord::Base.logger.debug('MemCache Set (%0.6f)  %s' % [elapsed,
> key])
>     value
>   rescue MemCache::MemCacheError => err
>     ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
>     nil
>   end
>
> 4. Теперь юзать для страниц Cache.get("Action:#{request.request_uri}",
> 0, true) и Cache.put("Action:#{request.request_uri}", response.body,
> 0, true)
>
> Внимание на последний параметр. Для всего остального последний
> параметр не передавать, оно false поставит.
>
> that's all
>
> --
> Alexey Kovyrin
> http://kovyrin.info/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20070605/2c843431/attachment.html>


More information about the nginx-ru mailing list