Ruby on rails Rails 3.1.1资产管道Heroku缓存获得

Ruby on rails Rails 3.1.1资产管道Heroku缓存获得,ruby-on-rails,heroku,asset-pipeline,Ruby On Rails,Heroku,Asset Pipeline,简而言之,问题是在开发模式中,我们会对CSS或JS文件进行更改,但总是会得到这些文件的缓存/旧版本。我所做的一切都没有任何效果。我检查了几十次配置,尝试了配置值的每一种组合,但总是得到相同的结果:陈旧/缓存文件。我必须在生产模式下运行,并在每次更改测试后重新启动服务器 我花了好几天的时间在这个问题上绞尽脑汁,查看了资产管道上的几十个stackoverflow问题,但从来没有找到一个能解决这个问题的,所以我想我应该把它贴在这里,留给子孙后代 我们使用Heroku并预编译我们的资产,因为Heroku

简而言之,问题是在开发模式中,我们会对CSS或JS文件进行更改,但总是会得到这些文件的缓存/旧版本。我所做的一切都没有任何效果。我检查了几十次配置,尝试了配置值的每一种组合,但总是得到相同的结果:陈旧/缓存文件。我必须在生产模式下运行,并在每次更改测试后重新启动服务器

我花了好几天的时间在这个问题上绞尽脑汁,查看了资产管道上的几十个stackoverflow问题,但从来没有找到一个能解决这个问题的,所以我想我应该把它贴在这里,留给子孙后代

我们使用Heroku并预编译我们的资产,因为Heroku未能为我们预编译(我们还使用Desive,这显然是Heroku预编译失败的原因)。因此,为了将我们的预编译资产推送到Heroku,我们必须将它们签入git

问题出在这里

当我们升级到Rails 3.1.1时,资产预编译生成了名称中包含和不包含MD5哈希的文件。我没怎么想,继续检查所有这些文件,这样我就可以推到heroku。后来,我注意到在开发模式下缓存结果的问题。没有MD5哈希的预编译和签入资产作为静态文件从/public/assets提供,这使我们无法看到在/app/assets中所做的任何更改

最终意识到这一点后,我运行了git-rm/public/assets,一切都恢复了正常。因此,要点是:小心地将资产检查到git中

把这变成一个问题:其他人是如何做到的?我错过了什么明显的东西吗?我真正想要的是Heroku为我预编译我的资产,但它失败了,因为我收集的db连接错误是由于Desive。我本来希望Rails 3.1.1能够解决这个问题,但没有解决。

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

您在github上签出了吗?特别是Jose Valim说

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


可能这将允许您在Heroku上进行预编译。

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

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


希望这能有所帮助。

谢谢-但这些对我都不管用。正如我在问题中提到的,我认为这是由于设计。slug编译期间的预编译总是会失败,并出现数据库连接错误。您是说运行时编译失败?是的,运行时编译失败,所以我在推到heroku.Dty之前一直处于预编译状态。在发布此问题之前,我已经尝试过此精确配置,但当时它对我不起作用。然而,我只是尝试了一次,这一次与设计1.4.9和你看,它的工作!谢谢你的建议,让我再试一次。@JeffCutler Stamm很高兴它成功了!我还在heroku上托管一个rails 3.1.1应用程序,但还没有添加Desive(但很快就会添加)。我要注意的是,您将其添加到config/application.rb中。实际上,还有另一种方法可以在heroku上进行预编译:他们最近添加了一个标志,使环境(以及数据库)在预编译期间可以访问。让他们把它打开就行了。对我来说很好!数据库依赖性不再是一个问题。不知道新的标志config.assets.initialize_on_precompile,但也会尝试。