config.assets.precompile的用途是什么?
在Rails 3.1中,您必须将您希望包含在资源预编译中的文件列入白名单。您必须打开配置/环境/ production.rb并明确包括资产你想预编译:config.assets.precompile的用途是什么?
config.assets.precompile += ['somestylesheet.css']
如果你不这样做,这一点,你运行耙资产:预编译,你的资产会不会被复制到公共/资产,并且您的应用程序会在找不到资产时引发异常(因此会导致生产中出现500错误)。
这是为什么这是必要的?为什么全部资产自动预编译?
这种当前的方法在部署时会产生额外的代码和压力。黑名单/排除资产不是很容易吗,所以事情就是开箱即用的。其他人分享这些感受?
预编译给我的资产非常酷,因此您不会最终部署不需要的资产。不要忘记uglifer宝石可以帮助压缩你的javascript。想象所有这些都不存在,你只需部署你的应用程序,你会发现你有未使用的CSS文件和未压缩的JavaScript。你觉得如何。这只是我自己的看法,我说资产管道是铁轨中最酷的东西。能够正确管理所有资产。
你得注意,如果我的轨道我不想编译你不想这样,你会在你的心中说为什么这个家伙编译这些资产的资产.. :)
大部分资产是自动包含在资产预编译中。按照RoR Guide on the Asset Pipeline:
编译文件的默认匹配包括的application.js,application.css和所有文件不结束JS和CSS:
[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
如果你会使用config.assets.precompile
有额外的资产包括:
config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']
或者你可以覆盖它。
这里的关键词是* most *。您仍然需要明确地将这些额外的任意资产(如admin.js)添加到您的应用配置中,或者某些页面可能会引发异常。我在辩论这个额外的步骤可能没有必要。 – dhulihan
我认为这与管道/链轮需要单独文件的能力有关。
例如,我在我的app/assets/javascripts
文件夹中有一个admin.js
文件。但它所做的只是需要其他几个.js文件。
//= require jquery
//= require jquery_ujs
//= require jquery.colorpicker.js
//= require jquery.wysiwyg.js
//= require wysiwyg.image.js
//= require jquery.fileupload.js
//= require jquery.fileupload-ui.js
//= require codemirror.js
//= require css.js
//= require admin_load
这是因为(a)我使用外部JS插件和(b)我喜欢让事情就像在不同的文件jQuery的onload事件处理程序。
如果每 .js文件预编译,那么它会预先编译这些单独的文件,这是完全没有必要的每一个。我想要/需要的是预编译的单个admin.js文件。
同样适用于CSS文件。
的确,有些资源不需要任何形式的编译(比如普通的'.js'文件),不应该编译它们,就像你说的那样。但是,如果您在链接清单以外的地方使用此资产(例如:在视图中使用'javascript_include_tag'admin.js''),并且您没有在应用程序的配置中明确包含此专用资源,则它永远不会复制到'public/assets',页面会在生产中引发异常。 – dhulihan
只是为了澄清,这更多的是**需要明确**指定资产的批评。 rails预编译过程不仅仅是编译代码,它还会将编译后的资源代码复制到Web服务器的公共目录中。 即使资产不需要编译(如简单的'.js'文件),您仍然需要告诉应用程序“预编译”它,以便将其复制到'public/assets'。如果您不这样做,那么需要该资产的页面会引发异常。 – dhulihan
如果您正在合并和缩小文件的练习中,您可能不希望预编译所有资产。此技术适用于您计划单独包含的资产。例如,在application.js中,您可以'需要'许多其他不需要预编译的JS文件。 –
@Simon Peck:你说的对,一些资产不需要预先编译,但如果它们没有明确包含,它们将不会被复制到最终资产位置(例如:'public/assets'),并且在请求时不会被找到。 使用'// = require'将资产添加到'application.js'工作,但会增加带宽开销,并且不适用于不会在站点范围内使用的资产。 – dhulihan