资产预编译缺少独立的javascript / css

时间:2011-12-30 21:16:32

标签: ruby-on-rails-3.1 asset-pipeline

我有一种偷偷摸摸的感觉,我错过了一些明显的东西:

我跑了

RAILS_ENV=production bundle exec rake assets:precompile

在推送到Heroku之前预先编译我的资产。查看/public/assets表示application.jsapplication.css清单已成功汇总,但我的独立文件未预编译

admin.js.coffee
blog.js.coffee.erb
[ ... several more similarly named ... ]
twitter.js.coffee.erb

admin.css.less
home.css.less
public.css.less

全部缺少/public/assets

我认为Rails会预编译application.js / .css文件,以及其他任何不以js / css结尾的内容:

  

编译文件的默认匹配器包括application.js,   application.css和所有不以js或css结尾的文件:

[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]

来自:http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

每次资产文件名更改时,我都不想手动更新config.assets.precompile。我错过了一些会让Rails预编译这些资产的东西吗?

更新

根据下面的@Richard Hulse的答案,我通过为独立资产创建了一个单独的清单文件来测试它(即我将twitter.js.coffee.erb重命名为twitter-include.js.coffee.erb并添加twitter.js一个//= require拉入重命名的原文。 这似乎有效。

必须有比此更清晰的方法,并且它似乎与上面引用的Rails指南相矛盾。该指南说,唯一不会编译的文件是.js或.css文件不是名为application。我所看到的是 .js或.css被直接编译(即不通过清单) - 没有别的。

1 个答案:

答案 0 :(得分:5)

两件事:

如果这些文件包含在您的应用程序清单中,则它们将包含在该站点的应用程序文件中。

两个应用程序清单中都应该有一行:require_tree,它会为您自动获取所有资产。那是在这些文件中吗?

编辑回复编辑:

我构建它的方式有两组清单。标准的(application.css / .js)是公开的。管理员设置用于管理页面。在admin.js / .css清单中包含您想要的所有内容,并将这些文件添加到预编译数组中:

config.assets.precompile += ['admin.js', 'admin.css']

这将允许您在两个组之间共享代码。例如,您可以在两者中包含jquery,但仅在admin中包含jquery_ujs。在您的管理部分布局中,只需包含管理员清单而不是应用程序清单。

在实践中,您将在开发网站时向应用程序或管理清单添加新文件,而不必更改预编译配置。

一旦你开始添加大量资产,管理部分等等,预计事情会变得更复杂,你必须明确清单和订单中包含的内容(相反) to require_tree)。