我刚刚熟悉 Rails 3.1,我花了一些时间更新一个旧项目,并试图弄清楚新资产管道在开发模式与生产模式中的表现。
默认config.assets.precompile
设置仅适用于application.css和application.js,目的是所有内容都应作为单个样式表和单个 javascript 文件提供。
显然在某些情况下我们不希望这样,所以我们可以将项目添加到该配置变量的列表中......
这是我在投入生产时使用沙盒项目遇到的情况:
- 浏览了开发中的网站,发现一切正常。资产被链接为单独的文件,并且站点正确显示。
- 将该站点上传到我的服务器,并尝试使其在生产中运行。第一个错误是说“ie.css”(一个条件样式表)没有预编译。(我在 Safari 中,甚至不会下载此样式表:
stylesheet_link_tag
在呈现页面之前,该错误是从帮助程序中引发的。) - 跑
rake assets:precompile
了又试了一次。 - 将有问题的项目添加到并重
config.assets.precompile
试。 - 将错误踢到路边,直到遇到另一个资产错误。
- 转到 3。
不知道如何解决这个问题,我转了几圈,直到我认为我得到了所有资产并且网站正在生产中渲染。然后我在 MSIE 中尝试了它并遇到了另一个错误 500:“belated_png_fix.js”被有条件地加载,直到那时它才出现。
所以我的问题是,除了反复试验或严重依赖集成测试之外,当资产管道发现某些样式表或 JavaScript 未添加到预编译列表中时,我如何预测我的网站不会崩溃?
我也很好奇为什么缺少样式表资产会导致整个页面出现错误 500,而不是仅按需编译它或在请求该资产时提供 404。这是故意“早早失败”的设计吗?