如何正确设置Rails + Paperclip + AWS CDN + Heroku

时间:2017-09-08 22:04:30

标签: ruby-on-rails heroku paperclip cdn

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

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

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

我已经联系过Heroku支持,但他们的反应是

  

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

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

环境/ 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"
  }

env变量   ASSET_HOST = //drex16ydhdd8s.cloudfront.net

在CDN上我有2个befaviors

  • / assets / * - 指向域名
  • 默认(*) - 指向s3 bucket

有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

解。 我有生产.rb   config.assets.compile = true

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

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