Я не могу заставить 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