我有一个board
控制器,我为它制作了一个board.css
文件。
当我推送到heroku时,我收到一条错误消息,指出board.css
未预编译。基于此question我添加了
config.assets.precompile += %w( *.css *.js )
到我的production.rb
文件。
这仍然没有修复它。我在这里缺少什么?
答案 0 :(得分:0)
打开config / environments / production.rb并确保将以下选项设置为true:
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true
然后运行:
rake assets:precompile --trace RAILS_ENV=production
答案 1 :(得分:0)
您的/assets
文件夹中是否有资产清单?
默认清单文件为/assets/application.js
和/assets/application.css
。
清单文件描述了将预编译的所有资源,如下所示:
/*
* This is a manifest file that'll automatically include all the stylesheets available in this directory
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
* the top of the compiled file, but it's generally better to create a new file per style scope.
*= require_self
*= require_tree ./dir
*= require_tree .
*/
此CSS清单预编译自身,assets/dir
和/assets
个文件夹中的所有css文件。
因此,请确保您有一个清单文件,并且需要board.css
具有匹配的路径。
在config.assets.precompile += %w( *.css *.js )
中设置production.rb
时,您告诉Rails /assets
文件夹中的所有文件都是清单文件。
恕我直言这是不正确的,您只需要添加自定义清单文件。
默认清单已包括在内:
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
关于其他解决方案,有话要说。如果你设置:
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true
这意味着您不必被迫拥有预编译资产。 这个诀窍是有效的,因为您的应用程序不会引发错误,但您仍然可以获得没有预编译资产的应用程序,并且您将在页面加载时间内支付。因此,应始终在生产环境中禁用此选项。
因此,当您启用它时,调用rake assets:precompile
并不能保证您将使用预编译资产。
最后请记住,在部署应用程序时,Heroku始终运行rake assets:precompile
,因此除非您在本地使用生产环境运行应用程序,否则无需手动预编译资产。