【问题标题】:Rails duplicating asset in production page load?Rails在生产页面加载中复制资产?
【发布时间】:2015-10-15 10:11:31
【问题描述】:

这是我第一次将真正的应用程序部署到生产环境中,我们在网站上遇到了一些速度问题。现在的主要问题是加载索引页面所需的时间,所以我知道这实际上是关于查询或类似的事情。

我们使用 Heroku + Puma + CloudFront 作为 CDN 来为我们的静态资产提供服务。问题是,我不太确定这是否应该发生:

如您所见,application.js 和 application.css 被加载了两次,一次来自 cloudfront,另一次来自 /assets。这应该发生吗?这只是一个示例,但我拥有的一些图像和 .svg 也会发生这种情况,它们被“加载”了两次。

需要注意的是,包含 js 和 css 的调用只在 head 标记中调用一次

谢谢

【问题讨论】:

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


    【解决方案1】:

    资产被加载一次,但通过两个 HTTP 调用,第一个是重定向到第二个。您可以看到第一个 application.js 导致重定向(见下面第三列中的 URL)到第二个 application.js,application.css 也是如此

    为避免重定向,您需要将 Rails 配置为从不同的域加载资产。为此,请在相关环境配置文件中设置config.action_controller.asset_host,如下所示:

    config.action_controller.asset_host = "http://XXXXXXX.cloudfront.net"
    

    【讨论】:

    • 感谢您的回答!我的production.rb 上确实设置了asset_host,还有其他原因吗? take.ms/goAI6
    • 您确定 RAILS_ENV 是为您的 Heroku 应用程序生产的吗?在控制台中尝试Rails.env。如果是生产,你能粘贴你的 production.rb 配置的其余部分吗?以及用于包含资产的代码?
    • @eirkir 这是生产,控制台这么说,SSL 配置和域和 s3 存储桶就位。这是 production.rb take.ms/Ey9VJtake.ms/BvncN 的代码,谢谢
    • 你为什么有config.assets.compile = true?请参阅此excellent SO post 以了解后果。此外,另外,您的资产是巨大的(这不是恭维)。您可能需要仔细查看您包含的 JS,看看您是否可以将其削减一点。
    • @CesarPalafox 我误读了上面的输出:看起来 Cloudfront 正在重定向到您的 Rails 服务器(反之亦然)。您的预编译资产应该如何到达 CDN?您使用的是asset_sync 还是其他gem?
    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 2014-09-12
    • 2017-02-06
    • 2014-07-24
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多