2012-09-09 30 views
1

我的rails 3.2應用程序試圖從高速緩存(memcached via dalli)獲取值,我不希望它是緩存。它沒有得到任何緩存命中,但我對發生的事情感到困惑。這發生在config.action_controller.perform_caching = true的生產和開發中,使用WEBrick。意外的memcache GET在rails 3.2應用程序

這裏是我所看到的內存緩存中的詳細輸出的一個片段:

<30 GET https://www.myrailsapp.com/? 
>30 Writing an error: Not found 
>30 Writing bin response: 
>30 0x81 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x01 
>30 0x00 0x00 0x00 0x09 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
<30 Read binary protocol data: 
<30 0x80 0x00 0x00 0xd0 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0xd0 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 

注意,只有一個緩存GET和我沒有看到任何緩存寫入。

我看到類似的緩存GET嘗試爲我所有的行爲,其中大部分是JSON API調用。所有這些導致緩存未命中。與此類似,

<31 GET https://www.myrailsapp.com/api/somecall?param1=foo&param2=bar 
>31 Writing an error: Not found 

我還沒有在我的應用程序指定的任何caches_action指令的任何地方。

這是一個軌道錯誤?

如果不是,我應該在哪裏停止這些不必要的緩存GET?

謝謝。

+1

[這個問題](https://github.com/mperham/dalli/issues/207)關於dalli和相關的關於如何[預防 - 緩存 - 錯誤 - 警告 - 執行 - 緩存]的問題(http://stackoverflow.com/questions/9353160/prevent-cache- miss-warnings-with-perform-caching-on?rq = 1)似乎是相關的,但並不能解釋爲什麼rails首先嚐試從緩存中獲取這些對象。 –

+0

此問題仍未解決。請參閱https://github.com/rails/rails/issues/7581上的github問題。如果您有時間進行調查或已經有解決方案,請在該處發帖。謝謝 –

回答

0

按照您發佈GitHub的線程上cswilliams:

這似乎是默認被啓用(因爲在主分支更新)與rack_cache的問題。

禁用它在你的應用程序或環境屬性文件(例如,配置/環境/ development.rb)似乎解決問題:

config.action_dispatch.rack_cache = false 
+0

在這種情況下禁用rack_cache的含義是什麼? –

+0

您將無法使用機架緩存來實現爲緩存資源提供服務的設計目的。如果你沒有很多靜態資產,那麼影響可能是零。 – kaneda

+0

明白了。更新了答案。 –

相關問題