Skip to content

Instantly share code, notes, and snippets.

@bl1ndy
Last active October 8, 2024 22:30
Show Gist options
  • Select an option

  • Save bl1ndy/bd47333aa281ff7d6f160abe3650db5e to your computer and use it in GitHub Desktop.

Select an option

Save bl1ndy/bd47333aa281ff7d6f160abe3650db5e to your computer and use it in GitHub Desktop.

Настройка Direct Upload из Ruby on Rails через Active Storage в Yandex Object Storage

  • Ruby on Rails 6.1
  • Active Storage 6.1

Yandex Object Storage

  1. Для начала работы необходимо зарегистрироваться в сервисе Yandex Cloud

  2. Создать платежный аккаунт. (После привязки карты начисляются демо-средства на 60 дней пробного периода).

  3. Создать сервисный аккаунт:

  • Главная страница консоли - Вкладка «Сервисные аккаунты» - Создать сервисный аккаунт
  • Задать произвольное имя аккаунта. Выбрать роль «admin» (Вероятно, только для использования хранилища эта роль избыточна, можете выбрать менее глобальную роль, но которая обязательно будет иметь доступ к хранилищу).
  • «Создать»
  1. Зайти в созданный сервисный аккаунт и создать ключ доступа, по которому мы будем аутентифицироваться при запросе к хранилищу:
  • «Создать новый ключ» - «Создать статический ключ доступа»
  • Описание можно не вводить
  • Откроется окно с идентификатором ключа и самим ключом. Эти данные нужно пока куда-то записать, так как после закрытия окна они будут уже не доступны.
  1. Зайти в панель управления Object Storage и создать там бакет. При создании бакета задать произвольное имя, остальные настройки можно не изменять.

  2. Зайти в созданный бакет и настроить CORS:

  • Вкладка «CORS» - «Настроить»
  • Задать произвольное имя правила.
  • Для простой загрузки и удаления файлов нам достаточно будет сохранить следующие настройки:
Allowed Origins *
Allowed Methods PUT
Allowed Headers *
Expose Headers *
MaxAgeSeconds 3600

RoR и Active Storage

Предполагается, что у вас уже установлен Active Storage (bin/rails active_storage:install, bin/rails db:migrate)

  1. Подключаем activestorage.js и в нужных нам формах устанавливаем direct_upload: true для поля загрузки файла.

  2. В 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 указывать обязательно.

  1. В config/environments в нужном окружении подключаем конфиг :yandex
Rails.application.configure do
  ...
  config.active_storage.service = :yandex
  ...
end
  1. Добавляем в Gemfile gem 'aws-sdk-s3', require: false и устанавливаем его - bundle
  2. Запускаем/перезагружаем сервер
  3. Проверяем загрузку файлов через формы в облако.
@Vicxwild
Copy link

Vicxwild commented Jun 2, 2023

При создании бакета так же нужно давать права доступа сервисному аккаунту

@audiosupp
Copy link

audiosupp commented Aug 27, 2024

Благодарю! Тоже из Новгорода, хех.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment