Alchemy CMS - объединение существующего конфига Heroku Dragonfly с Alchemy v3.5 (визуализация промежуточного программного обеспечения Dragonfly) - PullRequest
0 голосов
/ 28 августа 2018

Я не могу заставить Alchemy v3.6 и Dragonfly S3 работать в существующей среде Heroku.

Я обновляю свою производственную среду Alchemy CMS 3.2 (развернутую на Heroku) до Alchemy CMS 3.6. Моя производственная установка с Alchemy CMS использует хранилище Dragonfly и S3.

Моя проблемная область - инициализатор Dragonfly v3.5 и то, как он взаимодействует / конфликтует с руководством по развертыванию Alchemy Heroku: https://guides.alchemy -cms.com / edge / deploy_on_heroku.html .

Обновитель v3.5 устанавливает стандартный инициализатор Dragonfly для Alchemy, который теперь использует промежуточное программное обеспечение 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-адрес, такой как:

/ содержание / фото / 191 / показать / мой-image.jpg? Ш = 1c4dbd224d95fab4

После обновления до v3.6 URL-адреса этих изображений становятся примерно такими (но они получают ответ 404):

/ W1siZiIsIjIwMTgvMDgvMjgvMDUvNDgvNTMvMGY3YmI2ZTctYWIxNS00M2E3LTkzN2UtMGI5ZTNjMzQ1ZTVjL2Nob2NvbGF0ZS10cmVlLWJhbm5lci5wbmciXSxbInAiLCJlbmNvZGUiLCJqcGciLCItcXVhbGl0eSA4NSJdXQ / мой образ? Ша = 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

Должен ли я указать url_format для существующей производственной установки Heroku в производственном блоке?

Кроме того, я должен монтировать середину стрекозы в производственном блоке?

Я добавил строку secret в конфигурацию Heroku S3, это правильно?

Непроизводственный блок продается оптом из файла установщика 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 [роутер]: at = метод информации = GET путь = "/ W1siZiIsIjIwMTYvMDMvMDkvMjEvMzYvMjQvNmE3NDA1ZTItOWU3Yi00NThiLWE2MjAtN2U3MWRmYzFiZjhjL2Nob2NvbGF0ZS10cmVlLWxvZ28ucG5nIl0sWyJwIiwidGh1bWIiLCIxNjB4MTIwXHUwMDNlIl0sWyJwIiwiZW5jb2RlIiwianBnIiwiLXF1YWxpdHkgODUgLWZsYXR0ZW4iXV0 / мой образ? Ша = 55745937790605fd" host = xyz.herokuapp.com request_id = xxxxxxx fwd = "xx.xx.xx.xx" dyno = web.1 подключение = 1 мс служба = 114 мс статус = 404 байта = 4420 протокол = https

...