- Ruby on Rails 6.1
- Active Storage 6.1
-
Для начала работы необходимо зарегистрироваться в сервисе Yandex Cloud
-
Создать платежный аккаунт. (После привязки карты начисляются демо-средства на 60 дней пробного периода).
-
Создать сервисный аккаунт:
- Главная страница консоли - Вкладка «Сервисные аккаунты» - Создать сервисный аккаунт
- Задать произвольное имя аккаунта. Выбрать роль «admin» (Вероятно, только для использования хранилища эта роль избыточна, можете выбрать менее глобальную роль, но которая обязательно будет иметь доступ к хранилищу).
- «Создать»
- Зайти в созданный сервисный аккаунт и создать ключ доступа, по которому мы будем аутентифицироваться при запросе к хранилищу:
- «Создать новый ключ» - «Создать статический ключ доступа»
- Описание можно не вводить
- Откроется окно с идентификатором ключа и самим ключом. Эти данные нужно пока куда-то записать, так как после закрытия окна они будут уже не доступны.
-
Зайти в панель управления Object Storage и создать там бакет. При создании бакета задать произвольное имя, остальные настройки можно не изменять.
-
Зайти в созданный бакет и настроить CORS:
- Вкладка «CORS» - «Настроить»
- Задать произвольное имя правила.
- Для простой загрузки и удаления файлов нам достаточно будет сохранить следующие настройки:
Allowed Origins *
Allowed Methods PUT
Allowed Headers *
Expose Headers *
MaxAgeSeconds 3600
Предполагается, что у вас уже установлен Active Storage (bin/rails active_storage:install, bin/rails db:migrate)
-
Подключаем
activestorage.jsи в нужных нам формах устанавливаемdirect_upload: trueдля поля загрузки файла. -
В
config/storage.ymlдобавляем конфиг для Yandex Object Storage:
yandex:
service: S3
access_key_id: 'Идентификатор ключа доступа'
secret_access_key: 'Ключ доступа'
bucket: 'имя вашего бакета'
region: ru-central1
endpoint: 'https://storage.yandexcloud.net'
force_path_style: true
Ключ region указывать обязательно.
- В
config/environmentsв нужном окружении подключаем конфиг :yandex
Rails.application.configure do
...
config.active_storage.service = :yandex
...
end
- Добавляем в Gemfile
gem 'aws-sdk-s3', require: falseи устанавливаем его -bundle - Запускаем/перезагружаем сервер
- Проверяем загрузку файлов через формы в облако.
При создании бакета так же нужно давать права доступа сервисному аккаунту