预编译.css文件

时间:2013-04-26 00:41:45

标签: ruby-on-rails ruby-on-rails-3 heroku

我有一个board控制器,我为它制作了一个board.css文件。

当我推送到heroku时,我收到一条错误消息,指出board.css未预编译。基于此question我添加了

config.assets.precompile += %w( *.css *.js )

到我的production.rb文件。

这仍然没有修复它。我在这里缺少什么?

2 个答案:

答案 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

Source

答案 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,因此除非您在本地使用生产环境运行应用程序,否则无需手动预编译资产。