在Rails 3.1中,您必须将要包含在资产预编译中的文件列入白名单。您必须打开config / environments / production.rb并明确包含您想要预编译的资产:
config.assets.precompile += ['somestylesheet.css']
如果你不这样做而且你运行 rake assets:precompile ,你的资产将不会被复制到公共/资产,而你的应用程序会引发异常(因此导致500错误)在生产中)当找不到资产时。
为什么这有必要?为什么所有资产都不会自动预编译?
这种当前方法在部署时会产生额外的代码和压力。黑名单/排除资产不是更容易,所以事情开箱即用吗?其他人分享这些感受吗?
答案 0 :(得分:19)
大多数资产 会自动包含在资产预编译中。根据{{3}}:
用于编译文件的默认匹配器包括application.js,application.css和所有不以js或css结尾的文件:
[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
如果您要包含其他资源,则可以使用config.assets.precompile
:
config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']
或者你可以覆盖它。
答案 1 :(得分:8)
我认为这与管道/链接器需要单独文件的能力有关。
例如,我的admin.js
文件夹中有app/assets/javascripts
个文件。但它所做的只是需要其他几个.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文件也是如此。
答案 2 :(得分:2)
对我来说预编译的资产很酷,所以你不会最终部署你不想要的资产。也不要忘记有助于压缩你的javascripts的uglifer宝石。成像所有这些都不存在,你只需部署你的应用程序,你发现你有未使用的CSS文件和未压缩的javascripts。你觉得如何。这只是我自己的看法,我说资产管道是铁路中最酷的东西。能够正确管理所有资产。
请注意,如果我是rails,我不想编译你不想要的资产,所以你会在脑海里说出为什么这个人会编译这些资产.. :)