我有一种偷偷摸摸的感觉,我错过了一些明显的东西:
我跑了
RAILS_ENV=production bundle exec rake assets:precompile
在推送到Heroku之前预先编译我的资产。查看/public/assets
表示application.js
和application.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被直接编译(即不通过清单) - 没有别的。
答案 0 :(得分:5)
两件事:
如果这些文件包含在您的应用程序清单中,则它们将包含在该站点的应用程序文件中。
两个应用程序清单中都应该有一行:require_tree
,它会为您自动获取所有资产。那是在这些文件中吗?
编辑回复编辑:
我构建它的方式有两组清单。标准的(application.css / .js)是公开的。管理员设置用于管理页面。在admin.js / .css清单中包含您想要的所有内容,并将这些文件添加到预编译数组中:
config.assets.precompile += ['admin.js', 'admin.css']
这将允许您在两个组之间共享代码。例如,您可以在两者中包含jquery,但仅在admin中包含jquery_ujs。在您的管理部分布局中,只需包含管理员清单而不是应用程序清单。
在实践中,您将在开发网站时向应用程序或管理清单添加新文件,而不必更改预编译配置。
一旦你开始添加大量资产,管理部分等等,预计事情会变得更复杂,你必须明确清单和订单中包含的内容(相反) to require_tree)。