部署升级后的Rails 2.3.x后 - > 3.1(rc4)app今天下午到我们的测试环境,我们所有的样式表和JavaScript文件都返回了404错误。我们已经将rake资产:预编译任务添加到我们的部署后脚本中,并且需要一段时间来确定assets文件夹没有我们预期的预编译文件的原因。
最后,文件没有被编译,因为默认情况下只处理application.css和application.js(+非JS / CSS文件)。
我们需要更改以下配置值:
config.assets.precompile += %w( *.js *.css )
问题:为什么这不是默认值?
我原本预计任何不必作为清单文件处理的东西都会被复制到公共/资产中。我在资产管道上阅读的大部分内容基本上是“将资产放在应用程序/资产中,配置清单文件,它应该正常工作”。由于资产:预编译任务没有吐出任何有关它正在做什么的信息,因此需要一段时间才能确定它只是没有查看我们认为会存在的文件。
有什么理由说这对预编译配置来说不是一个好的值?
谢谢!
答案 0 :(得分:9)
我们的想法是让你的所有JavaScript和CSS总是一次性加载,而不是在你移动时加载点点滴滴。这样你总是可以加载“世界”并准备好使用,而不必在这里和那里包含一大堆单个文件。
这是一个更大的“预先”负载,但随后浏览器应该继续加载缓存中的所有javascript。因此,由于在第一次请求之后缓存了所有内容并准备好了,所以网站的感知速度应该加快。
这是一个有争议的决定,包括Rails,但默认包括CoffeeScript。 Rails一直是一个固执己见的框架。
答案 1 :(得分:0)
新的基于sprockets的管道编译/ asssets / stylesheets中的所有文件,/ assets / javascripts分别编译为application.css和application.js。
在您的视图中,您只需要链接应用程序文件,sprockets处理其余文件。
更新: 好吧,你不必将它全部变成一个文件......你可以拥有一个shared.js,secure.js和public.js,并让它们各自包含他们需要的部分......
不要将它们视为javascript文件,而是将建立javascript文件组的清单文件视为一组javascript_include_tag
。虽然默认情况下将文件夹中的所有内容都包含在一个文件中,但您可以随时选择要包含的内容,以及不包含的内容。
'预编译'任务只是运行那些清单文件并将多个文件编译成一个,同时运行预处理和sass或coffee脚本。