#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
Вот и все.
Я надеюсь, что это поможет