我有一个在Heroku Cedar堆栈上运行的Rails 3.2.11。我不在本地编译资产,它们是在 slug 编译期间自动编译的,如此处所述。除了默认application.css.scss
之外,我刚刚创建了一个新的CSS清单文件app/assets/stylesheets/new_manifest.css.scss
。当我推送到 Heroku 时,这个清单文件没有像application.css.scss
那样编译。新的清单文件在开发中工作正常。为什么会这样?
应用程序.rb
config.assets.enabled = true
config.assets.version = '1.0'
config.assets.initialize_on_precompile = false
生产.rb
config.assets.compile = false
config.serve_static_assets = false
config.assets.compress = true
config.assets.digest = true
来自 Heroku 推送的控制台输出
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
Asset precompilation completed (83.62s)
示例页面
<%= stylesheet_link_tag "new_manifest", media: "all" %>
解决方案是将config.assets.precompile += %w( new_manifest.css )
添加到 production.rb,如此处所述。这在开发中不是必需的,但在生产中是必需的,这引起了我的困惑。
说你的new_manifest
是一个清单文件,它应该包含在应用程序的主清单中:application.css
。如果你通过stylesheet_link_tag
它包含在资产管道控制之下(它被视为一个纯CSS文件,而不是一个清单文件)。它也即将被预编译,但包含即将被忽略。有一种更正确的方法可以将额外的清单文件包含在主application.css
中:索引文件(查找 2.1.2)。