gpt4 book ai didi

ruby-on-rails - 什么会导致 Rails 页面缓存停止工作?

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:05 25 4
gpt4 key购买 nike

我有一个 Rails 应用程序在某个地方停止了缓存,我不确定是哪个修订版阻止了它的工作。

我的印象是,页面缓存在正常工作时,即使找到缓存文件也不应该访问 Rails。但是,当加载我的页面并监控 production.log 时,它会影响 Rails 和数据库。

我设置了一个清理器,用于清除 :create、:update 和 :destroy 上的缓存。它工作正常,因为只要其中一个事件发生,/public/cache/index.html 文件就会更新。一开始我想这可能是因为我使用了 OutputCompression 插件,但是删除它有相同的结果,所以我把它放回去了。index.html 在那里,但是 .htaccess 和 Rails 忽略它并重建整个页面,包括重写缓存的 index.html。

以下是代码的相关部分(除非我遗漏了什么):

Controller :

class SecretsController < ApplicationController
caches_page :index
cache_sweeper :secret_sweeper, :only => [:create, :update, :destroy]

# snipped
end

.htaccess:

RewriteEngine On

# Rewrite index to check for cached
RewriteRule ^/$ /cache/index.html [QSA]
RewriteRule ^$ /cache/index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Firebug 响应头

Date: Tue, 02 Jun 2009 18:50:36 GMT
Server: Apache/1.3.41 (Unix) mod_fastcgi/2.4.2 PHP/5.2.9 mod_log_bytes/1.2 mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.8b
Vary: Accept-Encoding
X-Runtime: 0.05637
Etag: "4f3497a74141d1e92ae7a1fe4d5dc1d2"
Cache-Control: private, max-age=0, must-revalidate
Content-Encoding: gzip
Content-Length: 22356
Connection: close
Content-Type: text/html; charset=utf-8
default-style: tms

我希望能够使用 mod_gzip,但 ASmallOrange 不支持它,而 DreamHost 支持(在他们将我的价格提高三倍之前)。

无论如何,任何人都可以阐明为什么 Rails 忽略缓存的 index.html 吗?我假设它是 .htaccess 中的东西,因为如果它工作正常,它永远不会接触 Rails。

编辑:缓存问题原来是 RewriteRules 上的第一个斜杠。在我将它们都更改为“cache/index.html”之前,它没有找到缓存的文件,现在缓存工作得很好。

但是,现在我必须删除 OutputCompression 调用,因为它返回的是 Content-Type 设置为“text/html”的文件的 gzip 版本。知道如何让它为该文件发送正确的内容类型吗?它是整个应用程序中唯一缓存的。

再次编辑:将 .htaccess 更改为此对 gzip 问题没有帮助:

RewriteRule ^/$ cache/index.html [QSA,T=application/x-gzip]
RewriteRule ^$ cache/index.html [QSA,T=application/x-gzip]

它仍然显示为 zip 文件的文本表示(即乱码),除非禁用压缩。不过,缓存工作得很好。

最佳答案

为什么要使用 OutputCompression 插件? Apache 可以为您做到这一点。查看mod_deflate .

这是我使用的规则:

# Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-java
script
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

这将压缩应用程序的所有静态和动态文本输出。

只是一个猜测,但我想这也更快,因为它是一个用 C 语言编写的 Apache 模块。

关于ruby-on-rails - 什么会导致 Rails 页面缓存停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/941309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com