Различные URL для загрузки и выгрузки с помощью скрепки на хранилище S3 - PullRequest
2 голосов
/ 31 января 2020

Для локального развития я использую localstack Docker Контейнер как AWS Песочница с этой конфигурацией Скрепки:

config.paperclip_defaults = {
  storage:        :s3,
  s3_credentials: {
    access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  },
  bucket:         'my-development',
  s3_region:      'localhost-region',
  s3_host_name:   'localhost:4572',
  url:            ':s3_path_url',
}

Ссылки для загрузки контента генерируются правильно и работают:

http://localhost: 4572 / my-development / files / downloads / be-fl-che-spezialtiefbau-mischanlage-750_ae0f1c99d8.pdf

Но когда я хочу для загрузки новых файлов я получаю Aws :: Errors :: NoSuchEndpointError на основе другого URL:

https://my-development.s3.localhost-region.amazonaws.com/files/downloads/_umschlag-vorlage_c534f5f25e.pdf

Я искал и отлаживал несколько часов, но не мог узнать, где генерируется этот URL и почему он использует amazon aws .com в качестве хоста.

Любая подсказка где смотреть?

1 Ответ

1 голос
/ 10 февраля 2020

Я нашел способ заставить его работать.

Добавить явный URL-адрес конечной точки в конфигурацию

# config/environments/development.rb
config.paperclip_defaults = {
  storage:        :s3,
  s3_credentials: {
    access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  },
  s3_options:     {
    endpoint: 'http://localhost:4572/my-development',
  },
  bucket:         'my-development',
  s3_region:      'localhost-region',
  s3_host_name:   'localhost:4572',
  url:            ':s3_path_url',
}

Поскольку URL-адрес будет переименован с именем корзины на AWS Gem, результирующий домен будет my-development.localhost. Я не нашел другого решения, кроме как добавить этот поддомен в мой /etc/hosts:

127.0.0.1   localhost
127.0.0.1   my-development.localhost
255.255.255.255 broadcasthost
::1             localhost
::1             my-development.localhost

Это не очень чисто, но работает. Может быть, я нашел лучшую работу позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...