6

我正在使用Rails 3.1 w/asset pipeline,phusion 3.0.x和apache 2.2.17。Rails 3資產管道+ Apache + Phusion乘客

。在http://guides.rubyonrails.org/asset_pipeline.html的配置文檔,第4.1.1節它說我需要一個部分添加到我的Apache配置:

<LocationMatch "^/assets/.*$"> 
    # Some browsers still send conditional-GET requests if there's a 
    # Last-Modified header or an ETag header even if they haven't 
    # reached the expiry date sent in the Expires header. 
    Header unset Last-Modified 
    Header unset ETag 
    FileETag None 
    # RFC says only cache for 1 year 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
</LocationMatch> 

我一直在假設的Phusion乘客剛剛被「處理」這......還是我在沒有RTFM方面疏忽?如果我想利用指紋,我是否需要將其添加到apache配置中?

+2

請注意,當前版本的文檔沒有「Header unset Last-Modified」部分。請參閱http://stackoverflow.com/questions/ 8344186/rails-3-1-on-apache-pagespeed-says-specify-cache-validator-when-using-asset-p解釋它被刪除的原因 – gravitystorm

回答

9

如果您想要資產管道的全部好處,您確實需要將其添加到您的Apache配置中。如果沒有這部分,你的Apache配置可能會特別告訴瀏覽器而不是來緩存資源 - 導致瀏覽器和服務器之間不必要的往返次數。

爲了使其發揮作用,您可能需要啓用更多的Apache模塊。要做到這一點:

sudo a2enmod 
# Choose headers 
sudo a2enmod 
# Choose expires 
sudo service apache2 restart 

要調試您的設置,我建議使用Live Headers Firefox插件。使用該功能,請特別要求資產URL(例如,http://mysite.com/assets/application-8a0ae0b2d708f797674b7123c37501ba.css)and請在進行此更改之前和之後查看緩存標頭。通過在任何頁面上執行查看源查找示例資產URL

更改後,您應該看到緩存過期設置爲將來一年。

+0

很好的答案 - 尤其是頭文件和過期模塊,因爲我確實需要啓用這些功能。前後檢查了標題並驗證了更改。謝謝! – coreyt

+1

僅供參考,你可以在模塊之後用模塊調用a2enmod。例如,「sudo a2enmod過期」。 – nirvdrum

+0

我仍然想知道爲什麼我需要這樣做。我測試了它,它效果很好,是的。但是,對於沒有任何特殊配置的文件(例如Red Hat歡迎頁面),我的默認Apache2配置返回Not Modified 301。但一旦通過mod_passenger處理完成,它就不起作用。我想默認情況下mod_passenger不會這樣做。 – lzap