Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 防止缓存单个js文件_Ruby On Rails_Ruby On Rails 3.1_Asset Pipeline - Fatal编程技术网

Ruby on rails 防止缓存单个js文件

Ruby on rails 防止缓存单个js文件,ruby-on-rails,ruby-on-rails-3.1,asset-pipeline,Ruby On Rails,Ruby On Rails 3.1,Asset Pipeline,我的资产目录中有一个.js.erb文件。这将读取一些特定于语言环境的配置 但是,当基础配置更改时,新文件不会提供给我的浏览器。我没有修改 如果我通过添加空白来更改.js.erb文件,则新文件将正确送达。每次添加配置时都这么做会很痛苦 有没有一种方法可以将rails配置为不缓存这个特定的文件 谢谢你的建议 编辑: “在服务器启动后的第一个请求上编译和缓存资产。链轮设置一个必须重新验证缓存控制HTTP头,以减少后续请求的请求开销-在这些请求上,浏览器获得304(未修改)响应 如果清单中的任何文件在请

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

但是,当基础配置更改时,新文件不会提供给我的浏览器。我没有修改

如果我通过添加空白来更改.js.erb文件,则新文件将正确送达。每次添加配置时都这么做会很痛苦

有没有一种方法可以将rails配置为不缓存这个特定的文件

谢谢你的建议

编辑:

“在服务器启动后的第一个请求上编译和缓存资产。链轮设置一个必须重新验证缓存控制HTTP头,以减少后续请求的请求开销-在这些请求上,浏览器获得304(未修改)响应

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


所以这里的问题是第一个请求被缓存——这是一个动态javascript文件。这可能是防止缓存该文件以内联javascript的唯一方法???

您是否在提供该文件的控制器方法中尝试过类似的方法

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'

听起来您不想使用资产管道,因为它正在努力提升缓存

与其试图与资产管道抗争,不如创建一个实际的控制器,然后您就可以根据自己的喜好设置缓存控制头

如果在app/views/controller\u name中有一个js.erb模板,那么rails应该只渲染它

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

match '/javascripts/settings.js', :controller => :js, :action => :settings, :format => :js, :as => :setting_js
转到routes.rb文件,然后将settings.js.erb粘贴到app/views/js中

然后,您可以使用链接到它

= javascript_include_tag settings_js_path

这是一个javascript文件,位于assets目录下。看来没有控制器了。Rails似乎正在缓存服务器端提供的文件的第一个版本。您知道如何从控制器呈现js的好例子吗?我的.js.erb文件是否会在app/views下存活?如何最好地包含它?我猜javascript_include_标记会像a=require指令一样指向资产管道。为这么多的问题道歉,做了大量的谷歌搜索,找不到太多关于这方面的文档…我补充了一些澄清