【发布时间】:2011-12-15 12:51:50
【问题描述】:
简而言之,问题是在开发模式下,我们会更改 CSS 或 JS 文件,但总是会获得这些文件的缓存/旧版本。我所做的没有任何效果。我检查了数十次配置并尝试了配置值的每种组合,但始终得到相同的结果:陈旧/缓存的文件。我必须在生产模式下实际运行并在每次更改后重新启动服务器以进行测试。
我花了几天的时间来解决这个问题,查看了有关资产管道的数十个 stackoverflow 问题,但从未找到解决该问题的问题,所以我想我会把它贴在这里以供后代使用。
我们使用 Heroku 并预编译我们的资产,因为 Heroku 无法为我们进行预编译(我们还使用了设计,这显然是 heroku 预编译失败的原因)。因此,为了将我们的预编译资产推送到 Heroku,我们必须将它们签入到 git。
问题出在这里。
当我们升级到 Rails 3.1.1 时,资产预编译会生成名称中包含和不包含 MD5 哈希的文件。我没有多想,就继续检查所有这些文件,这样我就可以推送到heroku。一段时间后,我注意到开发模式下缓存结果的问题。没有 MD5 哈希值的预编译和签入资产从 /public/assets 作为静态文件提供,这使我们无法看到我们在 /app/assets 中所做的任何更改。
在终于意识到这一点之后,我运行了 git rm /public/assets 并且一切都恢复了。所以要点是:小心将资产签入 git!
把这变成一个问题:其他人是怎么做到的?我错过了一些明显的东西吗?我真正想要的是让 Heroku 为我预编译我的资产,但它失败了,因为我收集到的数据库连接错误是因为设计。我曾希望 Rails 3.1.1 能解决这个问题,但它没有。
【问题讨论】:
标签: ruby-on-rails heroku asset-pipeline