ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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

2007/6/5, Alexey Kovyrin <alexey@xxxxxxxxxxx>:
On 6/4/07, TDz TDz <tdz@xxxxxxxxxxxx> 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/



 




Copyright © Lexa Software, 1996-2009.