链接缓存未因文件更改而失效

时间:2016-06-14 23:03:27

标签: ruby-on-rails sprockets

我在测试环境中使用Webrick运行测试Ruby-on-Rails应用程序。自动端到端测试访问管理页面,该页面导致更新的JavaScript文件被另一个管理页面使用。问题是第二个管理页面没有看到更新,而是获取JavaScript文件的旧副本。我可以在文件系统上看到更改的文件,但即使从命令行使用curl,我仍然可以获得该文件的旧版本。以前的测试工作(至少使用Rails 4.0,如果不是4.1)。刚才我正在尝试更新到Rails 4.2,这个问题已经出现了。

我可以做些什么来告诉Rails / Sprockets忘记更新的JavaScript的旧缓存副本?我知道我什么时候更新它,如果我不能有选择地做它,甚至不介意重置Sprocket的整个缓存。我不能做的是每次更新JavaScript文件时重启服务器。

1 个答案:

答案 0 :(得分:0)

我尝试了许多方法来制作链轮"忘记"它的缓存副本,但似乎非常坚定地记住,我开始意识到我正在与一个根深蒂固的设计决定作斗争。最后我决定,只是为了我生成的JavaScript文件,我会完全避免链接,这意味着自己处理文件的编译和指纹,并为那些生成的文件编写我自己的javascript_include_tag版本

作为参考,编译和指纹实际上相当容易:

require "uglifier"
require "digest"

minified_content = Uglifier.compile(File.read(my_generated_js_file))
fingerprint = Digest::MD5.hexdigest(minified_content)
fingerprinted_file = File.basename(basename, '.js') + '-' + fingerprint + '.js'

(然后将指纹文件写出来公开/资产)。