Rails 3.1.1资产管道Heroku缓存问题

简而言之,问题是在开发模式下我们会对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修复此问题,但事实并非如此。

你有没有在github上看过这个设计问题 ? 特别是何塞瓦利姆说

Rails 3.1.1 final有一个名为config.assets.initialize_on_precompile的方法。 如果将其设置为false,那么您应该很好,但它不允许您访问资产的模型信息(您可能不应该这样做)。

也许这将允许预编译在Heroku上发生。

资产预编译不起作用的原因很可能是Heroku ENV变量不存在于slug编译(部署)中,如下所述:

http://devcenter.heroku.com/articles/rails31_heroku_cedar

有一种(实验性的)方法在部署期间启用ENV变量,正是出于这个原因,在此处查找信息:

http://devcenter.heroku.com/articles/labs-user-env-compile

希望这可以帮助。

查看Heroku的本指南 。 它概述了部署Rails 3.1应用程序的3种方法。 其中两个不需要本地预编译。