我有一个board
控制器,我已经board.css
为它制作了一个文件。
当我推送到 heroku 时,我收到一条错误消息,说board.css
不是预编译的。基于这个问题,我添加了
config.assets.precompile += %w( *.css *.js )
到我的production.rb
档案。
这仍然没有解决它。我在这里想念什么?
我有一个board
控制器,我已经board.css
为它制作了一个文件。
当我推送到 heroku 时,我收到一条错误消息,说board.css
不是预编译的。基于这个问题,我添加了
config.assets.precompile += %w( *.css *.js )
到我的production.rb
档案。
这仍然没有解决它。我在这里想念什么?
打开 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
您的/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
在你部署你的应用程序时运行,所以除非你在生产环境中本地运行你的应用程序,否则你不需要手动预编译你的资产。