Привет, я пытаюсь получить активное хранилище для отправки в пространство 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
Я следовал указаниям, найденным здесь, и все еще получаю сообщение об ошибке. Возможно ли, что есть новый способ сделать это?
Я как раз себе что-то подобное на днях поставил. Когда вы проверяете 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
Это все.
надеюсь, это поможет