在我的博客https://milesandlove.com上,我尽可能多地使用rails caches_page和Nginx进行表演。
当我第一次点击页面时,Rails会在我的缓存目录中创建一个.html文件,允许Nginx以前所未有的速度返回它。
如果请求是由ajax完成的,就像我的分页一样,它会在页面底部附加帖子或照片,Rails会在同一目录中创建一个.js文件。
但是如果javascript操作最初被非js客户端命中,例如爬虫机器人或只接受HTML的任何东西,则该操作将首先存储为.html文件,使得以下.js请求失败。
要试试,只需查看照片页面:https://milesandlove.com/photos
(抱歉用法语,但只需点击底部并点击“+ Plus”链接)。
似乎没有发生任何事情,因为它似乎返回了html而不是js。
我的Nginx conf:
location / {
add_header Alternate-Protocol 443:npn-spdy/2;
try_files /cache/$uri /cache/$uri.html $uri $uri/index.html $uri.html @rails;
gzip_static on;
expires max;
add_header Cache-Control public;
}
# Serving assets pipeline with a long expires date
location ~ ^/(images|system|assets)/ {
gzip_static on;
expires 1y;
add_header Cache-control public;
add_header ETag "";
break;
}
编辑:我可以弄清楚为什么它没有返回.js版本。由于nginx try_files在处理rails之前基本上说“返回xxx.html”,因此rails无法存储.js版本。
真正的问题是:有没有办法使用格式的try_files,如:
try_files $uri.$format ?