Rails caches_page返回HTML而不是JS

时间:2014-08-13 11:48:21

标签: javascript ruby-on-rails caching nginx ruby-on-rails-3.2

在我的博客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 ? 

0 个答案:

没有答案