防止缓存单个js文件

我的资产目录中有一个.js.erb文件。 这将读取一些特定于语言环境的配置

但是,当底层配置更改时,新文件未提供给我的浏览器。 我没有修改304。

如果我通过添加空格来更改.js.erb文件,则会正确提供新文件。 每次添加配置时都这样做会很痛苦。

有没有办法配置rails只是为了不缓存这个特定的文件?

谢谢你的任何建议。

编辑: 在资产管道上阅读更多内容

“在服务器启动后,资产在第一个请求上被编译和缓存.Sprockets设置必须重新生效的Cache-Control HTTP头以减少后续请求的请求开销 – 在这些请求上获得304(未修改)响应。

如果清单中的任何文件在请求之间发生了变化,则服务器将使用新的编译文件进行响应。“

所以这里的问题是第一个请求被缓存 – 这是一个动态的javascript文件。 也许是防止这种缓存内联javascript的唯一方法?

听起来你不想使用资产管道,它正在努力推动缓存。

而不是试图打击资产管道,创建一个实际的控制器,然后你就可以根据自己的喜好设置缓存控制头。

如果你在app / views / controller_name中有一个js.erb模板,那么rails应该只渲染它。

例如,如果您有一个名为JsController的控制器,您可以添加

match '/javascripts/settings.js', :controller => :js, :action => :settings, :format => :js, :as => :setting_js 

到你的routes.rb文件,然后在app / views / js中粘贴settings.js.erb

然后,您可以链接到它

 = javascript_include_tag settings_js_path 

您是否在为该文件提供服务的控制器方法中尝试过类似的操作?

 response.headers["Last-Modified"] = Time.now.httpdate response.headers["Expires"] = 0 response.headers["Pragma"] = "no-cache" response.headers["Cache-Control"] = 'no-store, no-cache, must-revalidate, max-age=0, pre-check=0, post-check=0'