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