Спасибо большое, мы паралельно пришли к похожему решению. Странно что разработчики RoR ещё не сделали встроенную опцию для этого, неотключаемая фича есть баг. Думаю это можно смело добавить в FAQ nginx благо использование его для Ruby становится всё более популярным
<br><br><div><span class="gmail_quote">2007/6/5, Alexey Kovyrin <<a href="mailto:alexey@kovyrin.net">alexey@kovyrin.net</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 6/4/07, TDz TDz <<a href="mailto:tdz@modestus.org">tdz@modestus.org</a>> wrote:<br>> В RoR есть вроде спец опция отключающая его механизмы оптимизации работы с<br>> мемкешд после чего он должен писать без выкрутасов. Дебагали след образом -
<br>> мемкеш демон запущен с -vv чтоб видеть запросы и ответы, запросы давали<br>> правда вместо telnet по nc вроде. В общем получается что nginx выдаёт<br>> приблизительно то же что и nc, попробую ковырять API рубивское
<br><br>Решение:<br><br>1. Скопировать memcache_util.rb в lib<br><br>2. добавить require RAILS_ROOT + '/lib/memcache_util.rb' в environment.rb<br>до CACHE = MemCache.new<br><br>3. поправить memcache_util<br><br> def
self.get(key, expiry = 0, raw = false)<br> start_time = Time.now<br> value = CACHE.get key, raw<br> elapsed = Time.now - start_time<br> ActiveRecord::Base.logger.debug('MemCache Get (%0.6f) %s' % [elapsed, key])
<br> if value.nil? and block_given? then<br> value = yield<br> put key, value, expiry<br> end<br> value<br> rescue MemCache::MemCacheError => err<br> ActiveRecord::Base.logger.debug "MemCache Error: #{
err.message}"<br> if block_given? then<br> value = yield<br> put key, value, expiry<br> end<br> value<br> end<br><br> ##<br> # Sets +value+ in the cache at +key+, with an optional +expiry+ time in
<br> # seconds.<br><br> def self.put(key, value, expiry = 0, raw = false)<br> start_time = Time.now<br> CACHE.set key, value, expiry, raw<br> elapsed = Time.now - start_time<br> ActiveRecord::Base.logger.debug
('MemCache Set (%0.6f) %s' % [elapsed, key])<br> value<br> rescue MemCache::MemCacheError => err<br> ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"<br> nil<br> end<br><br>
4. Теперь юзать для страниц Cache.get("Action:#{request.request_uri}",<br>0, true) и Cache.put("Action:#{request.request_uri}", response.body,<br>0, true)<br><br>Внимание на последний параметр. Для всего остального последний
<br>параметр не передавать, оно false поставит.<br><br>that's all<br><br>--<br>Alexey Kovyrin<br><a href="http://kovyrin.info/">http://kovyrin.info/</a><br></blockquote></div><br>