【问题标题】:Heroku conflict between gzipping assets and precompiling assetsgzip压缩资产和预编译资产之间的Heroku冲突
【发布时间】:2011-12-11 02:15:15
【问题描述】:

几个月来,我一直在 Heroku Cedar Stack 上运行 Rails 3.1 应用程序。我正在使用 Rack::Deflater 中间件来压缩我的内容并通过

config.middleware.insert_before ActionDispatch::Static, Rack::Deflater

在我的 staging.rb 文件中。

但是,从上周开始,我在部署到 Heroku 时出现以下错误

Running: rake assets:precompile
   rake aborted!
   No such middleware to insert before: ActionDispatch::Static

但是,运行 rake 中间件仍然返回

use Rack::Cache
use Rack::Deflater
use ActionDispatch::Static
use Rack::Lock

并且提供的内容仍然是 gzip 压缩的。但是,由于预编译失败,资产没有被编译(缩小)。手动 rake precompile::asets 也无济于事。

所以,我假设 ActionDispatch::Static 在资产预编译期间不可用。因此,我尝试在 Rack::Lock 之前插入 Rack::Deflater,现在我的资产已编译且没有任何错误消息,但提供的内容未压缩。

那么,我需要做些什么来 gzip 和编译我的资产?我错过了什么?谢谢。

【问题讨论】:

    标签: ruby-on-rails heroku gzip


    【解决方案1】:

    请注意Rack::Deflateris already used by Rails 3.1,因此您无需手动执行此操作。

    但是,为了在这里回答您的问题,我假设您的 production.rb 设置了 config.serve_static_assets = false

    ActionDispatch::Static 中间件仅在 serve_static_assets 设置为 true 时使用。 Heroku 实际上会注入此配置以覆盖您设置的任何内容(请参阅部署时的 Injecting rails3_serve_static_assets 日志消息),但我不确定在部署的哪个阶段会发生这种情况。

    因此,当assets:precompile 运行时,您可能没有启用静态资产服务(请注意,这只是一个猜测,我还没有使用 Rails 3.1,所以我可能是错的)

    我建议不要在您的机架文件中手动添加 membLoper 的建议:

    1. 如上所述,不需要
    2. 与您的应用程序相关的中间件应该像您最初在application.rb 中尝试过的那样注入

    【讨论】:

    • 好像不是这样的。你能指出主要来源吗?
    【解决方案2】:

    我仍然不明白为什么 Heroku 在预编译资产时无法识别 ActionDispatch::Static。但是,Heroku 人员确实建议了解决此问题的方法。

    Rack::Deflater 中间件需要插入到 config.ru 文件而不是环境文件中。类似的,

    require ::File.expand_path('../config/environment',  __FILE__)
    # Middleware to gzip content
    use Rack::Deflater
    run MyApplication
    

    这样,它不会干扰资产预编译,并且仍然会压缩所提供的内容。

    欢迎任何有关 config.ru 工作原理以及 Rack::Deflater 现在所在位置的资源。

    【讨论】:

    • 这很酷,但不如提供资产管道创建的 .gz 文件那么酷。我想知道有没有办法做到这一点?
    • 这里是a related question,您可能会觉得有帮助。
    猜你喜欢
    • 2015-08-28
    • 2012-11-23
    • 2021-07-01
    • 2012-06-26
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多