Передача активного хранилища Rails в пространства DigitalOcean

#ruby-on-rails #rails-activestorage

#ruby-on-rails #rails-activestorage

Вопрос:

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

вот что у меня есть в 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

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

Ответ №1:

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

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

Ответ №2:

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

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

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

Во-вторых, добавьте новую конфигурацию для 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
  

Наконец, укажите эти переменные среды file в вашем config/application.yml файле (если вы используете драгоценный камень Figaro) или в вашем .env файле. (если вы используете драгоценный камень dotenv). В моем случае я использовал драгоценный камень dotenv, поэтому мой .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
  

Вот и все.

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