为什么Rails在staging环境中无法为JS启用资产缓存?

3

我已将我的CSS和JS设置为缓存在RAILS_ROOT/app/views/layouts/application.html.erb中:

<%= stylesheet_link_tag 'reset', ...
                        'layout', 'colors', :cache => 'cache/all' %>
<%= javascript_include_tag 'jquery-1.3.2.min', ...
                           'application', :cache => 'cache/all' %>

如果我在开发环境中打开缓存,一切都按计划进行:

# in RAILS_ROOT/config/environments/development.rb:
config.action_controller.perform_caching = true

然而,当我将相同的代码放到暂存区时,/stylesheets/cache/all.css 会正确生成,但是 /javascripts/cache/all.css 却没有。尽管如此,该行代码仍会在HTML中生成:

<script src="/javascripts/cache/all.js?1253556008" type="text/javascript"></script>

访问该URL会得到一个空的JS文件(尽管不是404错误)。在文件系统中(RAILS_ROOT/public/javascripts/cache/all.js)没有这个文件。

有什么想法吗?


愚蠢的问题,但假设您已在config/environments/staging.rb中启用了缓存? - John Topley
1
是的 - 这就是我让 CSS 文件正确缓存的方法。Rails 明确认为缓存应该对两者都开启,因为它在暂存 HTML 中生成了 /all.js 和 /all.css 标签。 - James A. Rosen
我也遇到了同样的问题,删除文件没有帮助,它只是重建了一个空文件。 - Ben Lee
1个回答

3

这可能是一个不太可能的解决方法,但您可以尝试删除all.js文件并查看应用程序是否能够正确地重新构建它。一旦该文件存在,Rails似乎永远不会尝试重新构建它,因此如果由于某些错误或其他问题而导致其格式不良,则可能会被遗留在那里。


这个问题已经困扰我很长时间了,但如果我再次遇到它,这是一个很好的调试建议。 - James A. Rosen
对我有用!我遇到了一个问题,即在多次部署和删除缓存文件后,它仍然提供旧文件,而删除缓存文件似乎已经解决了这个问题。 - Daniel X Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接