Alchemy CMS-将现有的Heroku Dragonfly配置与Alchemy v3.5(Dragonfly中间件图片渲染)结合在一起

时间:2018-08-28 18:49:40

标签: ruby-on-rails heroku amazon-s3 dragonfly-gem alchemy-cms

我无法在现有的Heroku生产环境中使用Alchemy v3.6和Dragonfly S3。

我正在将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)。

我一直试图将其重构为单个初始化程序,该初始化程序既可以在使用S3的Heroku上运行,也可以在本地进行开发。到目前为止,我的配置如下。

下面的初始化程序在大多数情况下都适用。但是最重​​要的是,它不允许渲染存储在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吗?

我还应该在生产区中安装蜻蜓中间吗?

我在Heroku S3配置中添加了secret行,对吗?

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

在不合并初始化程序的情况下,现有的生产配置被覆盖(存储在名为initializers/alchemy.rb的{​​{1}}文件中),从而覆盖了Heroku Dragonfly配置。

我感觉这差不多了,因为现有的和新的图片都可以在dev localmachine上运行,并且使用Heroku,新的上载内容会到达生产环境中的S3存储桶中。它正在渲染失败的图片。

我收到的错误是404,如下所示:

  

2018-08-27T23:36:15.068230 + 00:00 heroku [router]:at = info method = GET   路径=   “/ W1siZiIsIjIwMTYvMDMvMDkvMjEvMzYvMjQvNmE3NDA1ZTItOWU3Yi00NThiLWE2MjAtN2U3MWRmYzFiZjhj​​L2Nob2NvbGF0ZS10cmVlLWxvZ28ucG5nIl0sWyJwIiwidGh1bWIiLCIxNjB4MTIwXHUwMDNlIl0sWyJwIiwiZW5jb2RlIiwianBnIiwiLXF1YWxpdHkgODUgLWZsYXR0ZW4iXV0 /我的图像?莎= 55745937790605fd”   host = xyz.herokuapp.com request_id = xxxxxxx fwd =“ xx.xx.xx.xx” dyno = web.1   connect = 1ms服务= 114ms状态= 404字节= 4420协议= https

0 个答案:

没有答案