Rails Active Storage продвигается в DigitalOcean Spaces

Привет, я пытаюсь получить активное хранилище для отправки в пространство DigitalOcean. Однако я обнаружил, что URL-адрес push меняется на amazonaws.com, хотя я определил конечную точку для цифрового океана.

вот что у меня есть в storage.yml

amazon:
  service: S3
  access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
  region: sfo2
  bucket: redacted_bucket_name
  endpoint: https://sfo2.digitaloceanspaces.com

Когда я пытаюсь загрузить файл, я получаю следующую ошибку:

Aws::Errors::NoSuchEndpointError (Encountered a `SocketError` while attempting to connect to:

  https://redacted_bucket_name.s3.sfo2.amazonaws.com/a8278561714955c23ee99

в моем gemfile у меня есть: gem 'aws-sdk-s3

Я следовал указаниям, найденным здесь, и все еще получаю сообщение об ошибке. Возможно ли, что есть новый способ сделать это?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
840
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я как раз себе что-то подобное на днях поставил. Когда вы проверяете URL-адрес https://redacted_bucket_name.s3.sfo2.amazonaws.com/a8278561714955c23ee99, он отличается от фактической конечной точки, которую вы настроили https://redacted_bucket_name.sfo2.amazonaws.com/a8278561714955c23ee99

ошибка вызвана недопустимой конечной точкой, в которую вы попали, s3 прямо перед .sfo2 смещает конечную точку. Вы случайно не добавили s3 в конфигурацию пространств? проверьте панель инструментов Spaces и попытайтесь правильно настроить конечную точку.

У меня была такая же проблема при работе над приложением Rails 6 в Ubuntu 20.04.

Вот как я исправил свою:

Во-первых, создайте Клавиши доступа к пробелам в вашей цифровой океанской консоли. Эта ссылка должна помочь - API-интерфейс DigitalOcean Spaces

Во-вторых, добавьте новую конфигурацию для DigitalOcean Spaces в свой файл config/storage.yml. Сразу после определения хранилища local:

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
digital_ocean:
  service: S3
  access_key_id: <%= SPACES_ACCESS_KEY_ID %>
  secret_access_key: <%= SPACES_SECRET_ACCESS_KEY %>
  region: <%= SPACES_REGION %>
  bucket: <%= SPACES_BUCKET_NAME %>
  endpoint: <%= SPACES_ENDPOINT %>

Примечание: Вы можете дать своей записи любое имя, например digital_ocean_spaces или что-то другое. Для себя я назвал его digital_ocean.

В-третьих, измените конфигурацию config.active_storage.service в файле config/environments/production.rb из:

config.active_storage.service = :local

к

config.active_storage.service = :digital_ocean

Наконец, укажите этот файл переменных среды в вашем файле config/application.yml (если вы используете гем Фигаро) или в вашем файле .env. (если вы используете гем дотенв). В моем случае я использовал гем дотенв, поэтому мой файл .env выглядел так:

SPACES_ACCESS_KEY_ID=E4TFWVPDBLRTLUNZEIFMR
SPACES_SECRET_ACCESS_KEY=BBefjTJTFHYVNThun7GUPCeT2rNDJ4UxGLiSTM70Ac3NR
SPACES_REGION=nyc3
SPACES_BUCKET_NAME=my-spaces
SPACES_ENDPOINT=https://nyc3.digitaloceanspaces.com

Это все.

надеюсь, это поможет

Другие вопросы по теме

Заказ нескольких изображений по имени файла в активном хранилище Rails 5.2
Rails 5 Active Storage: есть ли более эффективный способ отображения нескольких прикрепленных изображений?
Проверка того, является ли изображение ".attached?" когда не удается прикрепить одно и то же изображение к нескольким моделям
Загрузка изображения на S3 в Postman работает, но не работает, когда я использую React Native Image Picker
Сохраните вложение Mail как объект Active Storage в Rails
Как загрузить изображения/предварительно скомпилированные ресурсы с помощью PDFKit/wkhtmltopdf? Рельсы 5.2
Включить вложения Active Storage в запрос Active Record
Запросить изображение активного хранилища показать только одно не все изображения
Изображения в Active Storage не отображаются на странице ERB, но отображается другая страница ERB
Rails ActiveStorage не может удалить изображения на локальном хосте из-за неправильного пути