【问题标题】:inconsistent asset precompiling Rails 4 and Heroku不一致的资产预编译 Rails 4 和 Heroku
【发布时间】:2014-01-13 19:24:06
【问题描述】:

最近在 Heroku 上从 3.2 升级到 Rails 4.0.2。我注意到,可能所有其他推送我的stylesheet_link_tagjavascript_include_tag 标签都指向我的开发路径(即/assets/admin.css),而不是我的生产/预编译@指纹路径,例如/assets/admin-a334a2cf57ed6ffc29f7f7a1af35f380.css

这里是 production.rb 的相关设置:

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

# Generate digests for assets URLs
config.assets.digest = true

因为我在 Heroku 上,所以我在 application.rb 中有 config.assets.initialize_on_precompile = false。因此,如果我对资产文件进行了任何更改,我总是在部署之前运行bundle exec rake assets:precompile

这是我的文件夹层次结构:

app
 -assets
   -images
   -javascripts
   -stylesheets
     -themes
       dark.css
       blue.css
       etc...
     admin.css
     application.css
     jobboard.css

这是我的 application.config

config.assets.precompile += [
    'admin.css',
    'admin.js',
    'jobboard.js',
    'jobboard.css',
    'themes/dark.css',
    'themes/blue.css',
    'themes/green.css',
    'themes/plain.css',
    'themes/seafoam-flat.css',
    'themes/fire-flat.css'
  ]

但由于某种原因,我在生产中得到了这种不一致的行为。所有文件预编译。但有时 admin.css 文件不会被指纹引用,对于 /themes 下的 css 文件也是如此。关于为什么会发生这种情况的任何线索?

【问题讨论】:

  • 您能否重新编译您的资产,看看在此过程中是否有错误或丢失的文件?

标签: heroku ruby-on-rails-4 asset-pipeline


【解决方案1】:

如果缺少预编译文件,也许你应该将它们添加到 config/application.rb

config.assets.precompile += %w( admin.css )

然后

RAILS_ENV=production bundle exec rake assets:precompile

您可以在清单 ( public/assets ) 中检查丢失的文件或查看指纹。

【讨论】:

  • 谢谢。我的所有文件都列在 config/application.rb 中。没有报告丢失。
  • 谢谢。这个问题并不是真正的缺失。有时会引用正确/预编译的版本,有时会引用开发版本。在生产中引用开发版本时 - 它不存在,因此不会呈现 css。
  • 它是随机文件还是所涉及的始终相同?
  • 它总是相同的几个文件 - 但它是随机发生的。
  • 这篇文章 (stackoverflow.com/questions/14697604/…) 建议 heroku 通常直接编译资产。也许这会与您本地编译的资产发生冲突?
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2013-08-30
相关资源
最近更新 更多