Для работы с Yandex Object Storage необходимо еще:
- прописать в Gemfile`gem “aws-sdk-s3”, require: false` и потом естественно bundle install
- прописать у сервиса yandex параметр `region: ‘ru-central3’`
PS если ранее не пользовались, то выполнить поддержку Active Storage:
3. `rails active_storage:install`
4. `rails db:migrate`
И вот только после этого будет все работать.
Пояснение относительно gem-а:
Active Storage http://rusrails.ru/active_storage_overview#servis-amazon-s3 требует указанный выше gem для работы с Amazon S3. Это нужно так как Yandex Object Storage поддерживает методы Amazon S3 https://cloud.yandex.ru/docs/storage/s3/, то и устанавливаем его https://github.com/aws/aws-sdk-ruby
Пояснение относительно ключа region:
Без него не работало, так как трубуется указание ключа региона https://cloud.yandex.ru/docs/storage/s3/signing-requests
Для начала, нам нужны ключи для доступа к API. Их можно создать во вкладке “Сервисные аккаунты”: Создать новый ключ > Создать ключ доступа. Идентификатор ключа будет выполнять роль YOUR_ACCESS_KEY_ID, а Секретный ключ, соответственно, YOUR_SECRET_ACCESS_KEY.
Точкой отсчёта мы возьмём стандартный конфиг от Амазона, который лежит в config/storage.yml:
amazon: service: S3 access_key_id: 'YOUR_ACCESS_KEY_ID' secret_access_key: 'YOUR_SECRET_ACCESS_KEY' region: eu-north-1 bucket: bucketname
Для подключения к стороннему хранилищу, нам нужно указать для него эндпоинт, в случае с яндексом это будет:
https://storage.yandexcloud.net
Также нам понадобится установить переменную force_path_style в true, чтобы AS использовал нужный нам тип URL. Итого получим такой конфиг:
yandex: service: S3 access_key_id: 'YOUR_ACCESS_KEY_ID' secret_access_key: 'YOUR_SECRET_ACCESS_KEY' bucket: bucketname endpoint: 'https://storage.yandexcloud.net' force_path_style: true
Останется в конфиге окружения указать Яндекс:
Rails.application.configure do ... config.active_storage.service = :yandex ... end
После этого можно использовать апи Active Storage в своем приложении.