我不能让Alchemy v3.6和Dragonfly S3在现有的Heroku 生产环境 环境中工作 .

我正在将Alchemy CMS 3.2 生产环境 环境(部署在Heroku上)升级到Alchemy CMS 3.6 . 我使用Alchemy CMS进行的 生产环境 安装使用Dragonfly和S3存储 .

我关注的领域是v3.5 Dragonfly初始化程序以及它如何与Alchemy Heroku部署指南进行交互/冲突:https://guides.alchemy-cms.com/edge/deploy_on_heroku.html .

v3.5升级程序为Alchemy安装了一个股票模板Dragonfly初始化程序,现在使用Dragonfly中间件渲染所有图片(v3.5升级程序在这里复制dragonfly配置:https://github.com/AlchemyCMS/alchemy_cms/blob/3.5-stable/lib/alchemy/upgrader/three_point_five.rb) .

我一直在尝试将它重构为一个初始化程序,它既可以在Heroku上使用S3,也可以在本地进行开发 . 到目前为止,我有下面的配置 .

下面的初始化程序适用于大多数情况 . 然而,最重要的是,它不允许渲染存储在S3上的现有 生产环境 图像或渲染刚刚上传到S3的新图像 .

在v3.2 生产环境 映像中获取了一个URL,例如:

/content/pictures/191/show/my-image.jpg?sh=1c4dbd224d95fab4

升级到v3.6后,这些图像URL会变成这样(但它们会收到404响应):

/ W1siZiIsIjIwMTgvMDgvMjgvMDUvNDgvNTMvMGY3YmI2ZTctYWIxNS00M2E3LTkzN2UtMGI5ZTNjMzQ1ZTVjL2Nob2NvbGF0ZS10cmVlLWJhbm5lci5wbmciXSxbInAiLCJlbmNvZGUiLCJqcGciLCItcXVhbGl0eSA4NSJdXQ /我的图像?SHA = 2cd4ba612a2ad88a

我的组合Dragonfly.rb配置是(我尝试修改Heroku指南部署配置是上半部分):

if Rails.env.production?
  require 'dragonfly'
  require 'dragonfly/s3_data_store'

  aws_defaults = {
      access_key_id: Rails.configuration.aws_access_key_id,
      secret_access_key: Rails.configuration.aws_secret_access_key,
      region: 'eu-west-1',
      storage_headers: {'x-amz-acl' => 'public-read'},
      url_scheme: 'https'
  }

  Dragonfly.app(:alchemy_pictures).configure do
    plugin :imagemagick
    secret ENV['DRAGONFLY_SECRET']
    url_format '/pictures/:job/:name.:ext'

    datastore :s3,
              { bucket_name: Rails.configuration.aws_images_directory }.merge(aws_defaults)
  end

  # Mount as middleware
  Rails.application.middleware.use Dragonfly::Middleware, :alchemy_pictures

  Dragonfly.app(:alchemy_attachments).configure do
    datastore :s3,
              { bucket_name: Rails.configuration.aws_attachments_directory }.merge(aws_defaults)
  end
else
  Dragonfly.app(:alchemy_pictures).configure do
    dragonfly_url nil
    plugin :imagemagick
    plugin :svg
    secret ENV['DRAGONFLY_SECRET']
    url_format '/pictures/:job/:name.:ext'

    datastore :file,
              root_path: Rails.root.join('uploads/pictures').to_s,
              server_root: Rails.root.join('public'),
              store_meta: false
  end

  # Mount as middleware
  Rails.application.middleware.use Dragonfly::Middleware, :alchemy_pictures

  # Attachments
  Dragonfly.app(:alchemy_attachments).configure do
    datastore :file,
              root_path:  Rails.root.join('uploads/attachments').to_s,
              store_meta: false
  end
end

我应该为 生产环境 区中现有的Heroku 生产环境 安装指定 url_format 吗?

另外,我应该在 生产环境 区中安装Dragonfly中间件吗?

我在Heroku S3配置中添加了 secret 行,这是正确的吗?

非 生产环境 块是从安装程序复制到我的应用程序的v3.5安装程序 dragonfly.rb 文件中批发的 .

如果没有组合初始化程序,现有的 生产环境 配置将被覆盖(它存储在名为 initializers/alchemy.rb 的文件中,该文件在 initializers/dragonfly.rb 之前运行)覆盖了Heroku Dragonfly配置 .

我觉得这几乎就在那里,因为现有的和新的图片在dev localmachine上工作并使用Heroku,新的上传到达 生产环境 环境中的S3桶 . 它是渲染失败的图片 .

我收到的错误是404,如:

2018-08-27T23:36:15.068230 00:00的Heroku [路由器]:在= INFO方法= GET路径= “?/ W1siZiIsIjIwMTYvMDMvMDkvMjEvMzYvMjQvNmE3NDA1ZTItOWU3Yi00NThiLWE2MjAtN2U3MWRmYzFiZjhjL2Nob2NvbGF0ZS10cmVlLWxvZ28ucG5nIl0sWyJwIiwidGh1bWIiLCIxNjB4MTIwXHUwMDNlIl0sWyJwIiwiZW5jb2RlIiwianBnIiwiLXF1YWxpdHkgODUgLWZsYXR0ZW4iXV0 /我的图像沙= 55745937790605fd” 宿主= xyz.herokuapp.com REQUEST_ID = XXXXXXX FWD = “xx.xx.xx.xx”dyno = web.1 connect = 1ms service = 114ms status = 404 bytes = 4420 protocol = https