Rails 3.1.1资产管道Heroku缓存问题

时间:2011-10-26 07:29:22

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

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

3 个答案:

答案 0 :(得分:12)

你有没有在github上看过这个devise issue?特别是何塞·瓦利姆说

  

Rails 3.1.1 final有一个叫做的方法   config.assets.initialize_on_precompile。如果你把它设置为假,你   应该是好的,但它不允许您访问模型信息   你的资产(你可能不应该这样做)。

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

答案 1 :(得分:1)

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

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

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

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

希望这有帮助。

答案 2 :(得分:0)

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