【问题标题】:How to properly setup Rails + Paperclip + AWS CDN + Heroku如何正确设置 Rails + Paperclip + AWS CDN + Heroku
【发布时间】:2023-03-15 15:44:01
【问题描述】:

似乎我终于想出了如何设置 Rails + Paperclip + AWS CDN + Heroku。 一切似乎都在工作。 CSS 和 js 文件都从 cdn 加载,以及图像。 不幸的是,共享功能被破坏了。打开图形无法解析图像 url。我认为这是因为链接采用这种格式https:////drex16ydhdd8s.cloudfront.net/...rest_of_url

原来,很久以前,我将CDN链接配置为//drex16ydhdd8s.cloudfront.net。我知道我需要删除链接前面的斜杠,改为drex16ydhdd8s.cloudfront.net

问题是,如果我这样做,Heroku 会给我应用程序错误。 (显示他们的静态页面) 日志没有显示任何有用的信息,除了它似乎立即超过了内存限制。

我已联系 Heroku 支持,但他们的回复是

您不需要任何斜杠,它应该只是一个主机名。 (如 config.action_controller.asset_host 的文档中所见。) 如果删除斜线会导致错误,您需要调试这些错误。

我尝试在本地进行,一切似乎都按预期工作。

environments/production.rb

  config.action_controller.asset_host = ENV.fetch("ASSET_HOST", ENV.fetch("APPLICATION_HOST"))

  config.paperclip_defaults = {
    storage: :s3,
    s3_protocol: :https,
    s3_region: ENV["AWS_REGION"],
    url: ":s3_alias_url",
    path: "/:class/:attachment/:id_partition/:style/:filename",
    s3_host_alias: ENV.fetch("ASSET_HOST"),
    s3_credentials: {
      bucket: ENV["S3_BUCKET_NAME"],
      access_key_id: ENV["AWS_ACCESS_KEY_ID"],
      secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"]
    },
    default_url: "https://s3.amazonaws.com/ezpoisk/missing-small.png"
  }

环境变量 ASSET_HOST = //drex16ydhdd8s.cloudfront.net

在 CDN 上我有 2 个行为

  • /assets/* - 指向域名
  • 默认 (*) - 指向 s3 存储桶

有人有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails heroku paperclip cdn


    【解决方案1】:

    解决方案。 我在生产中.rb config.assets.compile = true

    我对这里的细节不强,我只记得我在这一行做了一个注释,可能在切换到 cdn 时将其删除。 在挖掘了this answer 之后,我决定尝试一下。所以我

    • 删除了内衬,
    • 已部署,
    • 一切正常。
    • 然后尝试更新 cdn 链接。
    • 起初,同样的问题仍然存在,由于某种原因,网址是 /drex16ydhdd8s.cloudfront.net,但几秒钟后,现在似乎 一切都好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-02
      • 2013-12-23
      • 1970-01-01
      • 2011-06-24
      • 2017-06-24
      • 2014-05-15
      • 2012-12-30
      • 2014-06-11
      相关资源
      最近更新 更多