Javascript Rails缓存页面返回HTML而不是JS

Javascript Rails缓存页面返回HTML而不是JS,javascript,ruby-on-rails,caching,nginx,ruby-on-rails-3.2,Javascript,Ruby On Rails,Caching,Nginx,Ruby On Rails 3.2,在我的博客上,我尽可能多地使用rails缓存和Nginx来提高性能 当我第一次访问该页面时,Rails将在缓存目录中创建一个.html文件,允许Nginx比以往更快地返回它 如果请求是由ajax完成的,比如我的分页,在页面底部追加帖子或照片,Rails会在同一目录中创建一个.js文件 但是,如果javascript操作首先被非js客户端(如爬虫机器人或任何只接受HTML的客户端)命中,则该操作将首先存储为.HTML文件,从而导致以下.js请求失败 要让您尝试,只需查看照片页面: 抱歉,这是法语,

在我的博客上,我尽可能多地使用rails缓存和Nginx来提高性能

当我第一次访问该页面时,Rails将在缓存目录中创建一个.html文件,允许Nginx比以往更快地返回它

如果请求是由ajax完成的,比如我的分页,在页面底部追加帖子或照片,Rails会在同一目录中创建一个.js文件

但是,如果javascript操作首先被非js客户端(如爬虫机器人或任何只接受HTML的客户端)命中,则该操作将首先存储为.HTML文件,从而导致以下.js请求失败

要让您尝试,只需查看照片页面:

抱歉,这是法语,但只需在底部点击+加链接

似乎什么也没发生,只是因为它似乎返回html而不是js

我的Nginx配置:

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_文件基本上是说在处理rails之前返回xxx.html,rails无法存储.js版本

真正的问题是:有没有办法尝试使用以下格式的文件:

try_files $uri.$format ? 

为请求格式添加约束怎么样?或者强制响应总是js?我想说这可能是因为try_files指令。因为它被要求返回$uri.html,如果这个格式在.js之前被缓存,nginx只会返回它,使得答案不起作用。所以你应该问这个关于服务器故障的问题。