0

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

当我推送到 heroku 时,我收到一条错误消息,说board.css不是预编译的。基于这个问题,我添加了

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

到我的production.rb档案。

这仍然没有解决它。我在这里想念什么?

4

2 回答 2

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

资源

于 2013-04-26T00:49:19.850 回答
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在你部署你的应用程序时运行,所以除非你在生产环境中本地运行你的应用程序,否则你不需要手动预编译你的资产。

于 2013-04-26T01:54:44.373 回答