1

所以,我的<head>, 里面有以下代码行app/views/layouts/application.html.erb

<%= stylesheet_link_tag "front", :media => "all" %>

这在开发中运行良好,但是当我切换到生产时它会中断,因为它没有预编译,所以我运行rake assets:precompile,它将一堆文件添加到我的公共目录中,也很好,但是所有 css 和 js 文件的名称如下:

  • application-digest.ext
  • application-digest.ext.gz
  • application.ext
  • application.ext.gz

哪里extcssjs,并且digest明显不同。

图像文件随版本name.ext一起提供。name-digest.ext

所以,当导航到页面时,我得到一个ActionView::Template::Error告诉我front.css isn't precompiled

由于我对不同的控制器有不同的布局(以及FrontController使用application.html.erb布局,如果这很重要),我不想在所有控制器布局中包含所有css 或 js 文件,因为这只是浪费带宽。

我如何告诉 rails app/assets 单独编译里面的所有文件?


config.assets.compile = true我设法通过设置inside使用实时编译来“解决”问题config/environments/production.rb,但我一直在到处阅读这不是处理资产的最佳方式[1],因为它浪费了大量资源。

该应用程序托管在 Heroku 上。


[1]:官方 Ruby on Rails 指南页面“此模式使用更多内存,性能比默认更差,不推荐。”

4

1 回答 1

1

如果您在本地预编译资产,那么您需要 git commit 资产,以便 heroku 加载它们。但这不是你想做的。

/config/environments/production.rb

config.assets.precompile += %w(front.css, another.css, heres_a_javascript.js)

application.js 和 application.css 会自动预编译。您在 application.html (或任何地方,真的)中链接的所有其他内容都需要在此处预编译

于 2012-11-28T18:17:33.043 回答