9

今天下午我将升级后的 Rails 2.3.x -> 3.1 (rc4) 应用程序部署到我们的测试环境后,我们所有的样式表和 JavaScript 文件都返回 404 错误。我们已经将 rake assets:precompile 任务添加到我们的部署后脚本中,并且需要一段时间来确定为什么 assets 文件夹没有我们预期的预编译文件。

最后,这些文件没有被编译,因为默认情况下显然只有 application.css 和 application.js(+ 非 JS/CSS 文件)被处理。

我们需要更改以下配置值,如下所示:

config.assets.precompile += %w( *.js *.css )

问题:为什么这不是默认值?

我本来希望任何不需要作为清单文件处理的东西都会被复制到公共/资产中。我在资产管道上读到的大部分内容本质上是“将您的资产粘贴到应用程序/资产中,配置清单文件,它应该可以正常工作”。由于 assets:precompile 任务没有吐出任何关于它正在做什么的信息,因此需要一段时间才能确定它只是没有查看我们认为它会查看的文件。

有什么理由说明这对于预编译配置来说不是一个好的价值吗?

谢谢!

4

2 回答 2

9

这个想法是让你的所有 JavaScript 和 CSS 总是一次性加载,而不是在你移动时加载点点滴滴。这样,您始终可以加载并准备好使用“世界”,而不必在这里和那里包含一大堆单独的文件。

这是一个更大的“预先”负载,但是浏览器应该继续从缓存中加载所有的 javascript。因此,由于所有内容都已缓存并准备好在第一个请求之后进行,因此站点的感知速度应该会加快。

这是一个有争议的决定,包含在 Rails 中,但默认包含 CoffeeScript 也是如此。Rails 一直是一个固执己见的框架。

于 2011-06-20T18:26:49.560 回答
0

默认情况下,新的基于 sprockets 的管道编译 /asssets/stylesheets 和 /assets/javascripts 中的所有文件,分别编译为 application.css 和 application.js。

在您看来,您只需要链接应用程序文件,其余的由 sprockets 处理。

更新:嗯,你不必把它全部放在一个文件中......你可以有一个 shared.js、secure.js 和 public.js 并让它们每个都包含他们需要的部分......

不要将它们视为 javascript 文件,而是将它们视为建立 javascript 文件组的清单文件,然后您可以将它们作为一个包含单个javascript_include_tag. 虽然默认设置是将文件夹中的所有内容包含在一个文件中,但您始终可以选择要包含的内容和不包含的内容。

“预编译”任务只是运行那些清单文件并将多个文件编译为一个,同时预处理和运行它的 sass 或咖啡脚本。

于 2011-06-20T18:10:50.710 回答