【问题标题】:Rails 3.1.1 asset pipeline Heroku caching gotchaRails 3.1.1 资产管道 Heroku 缓存陷阱
【发布时间】: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


    【解决方案1】:

    你在 github 上查看过这个 devise issue 吗?具体来说,何塞瓦利姆说

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

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

    【讨论】:

    • Dty,我在发布这个问题之前已经尝试过这个确切的配置,但当时它对我不起作用。但是,我又试了一次,这次使用的是 Devise 1.4.9,你瞧,它可以工作了!感谢您的建议让我再次尝试。
    • @JeffCutler-Stamm 很高兴它成功了!我还在 heroku 上托管了一个 rails 3.1.1 应用程序,但还没有添加设计(但很快就会)
    • 我会注意到您将其添加到 config/application.rb
    • 实际上,还有另一种在 Heroku 上进行预编译的方法:他们最近添加了一个标志,使环境(也包括数据库)在预编译期间可访问。只是要求他们打开它。对我来说工作得很好!数据库依赖性不再是问题。虽然不知道新标志 config.assets.initialize_on_precompile,但也会尝试。
    【解决方案2】:

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

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

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢 - 但这些都不适合我。正如我在问题中提到的,我认为这是由于设计。 slug 编译期间的预编译总是失败并出现数据库连接错误。
      • 你是说运行时编译对你来说失败了?
      • 是的,运行时编译失败,所以我在推送到 heroku 之前被预编译卡住了。
      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 2011-10-04
      • 2011-12-25
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2012-04-17
      相关资源
      最近更新 更多