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

Dav*_* W. 6 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
Run Code Online (Sandbox Code Playgroud)

admin.css.less
home.css.less
public.css.less
Run Code Online (Sandbox Code Playgroud)

都缺少了/public/assets.

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

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

[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
Run Code Online (Sandbox Code Playgroud)

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

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

更新

基于以下@Richard赫尔斯的答案,我测试了它通过创建一个独立的资产单独的清单文件(即我改名twitter.js.coffee.erbtwitter-include.js.coffee.erb并添加twitter.js一个单一//= require的原改名拉).这似乎有效.

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

Ric*_*lse 5

两件事情:

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

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

编辑回复编辑:

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

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

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

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

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