Я пытаюсь настроить ActiveStorage для использования корзины S3 в качестве бэкэнда хранилища, однако я не хочу передавать ни один из access_key_id
, secret_access_key
, region
. Вместо этого я хотел бы использовать ранее определенную роль IAM. Такая конфигурация упоминается здесь . Это читает (я добавил жирным шрифтом):
Если вы хотите использовать переменные среды, стандартные файлы конфигурации SDK, профили, профили экземпляра IAM или роли задач, вы можете пропустить access_key_id, secret_access_key и ключи региона в приведенном выше примере. Сервис Amazon S3 поддерживает все параметры аутентификации, описанные в документации AWS SDK.
Однако я не могу заставить его работать. Мой storage.yml
выглядит примерно так:
amazon:
service: S3
bucket: bucket_name
credentials:
role_arn: "linked::account::arn"
role_session_name: "session-name"
Я запустил rails active_storage:install
, применил сгенерированные миграции и установил config.active_storage.service = :amazon
в конфигурации моего приложения.
Проблема в том, что когда я пытаюсь сохранить файл, я получаю неожиданную ошибку:
u = User.first
s = StringIO.new
s << 'hello,world'
s.seek 0
u.csv.attach(io: s, filename: 'filename.csv')
Traceback (most recent call last):
2: from (irb):3
1: from (irb):3:in `rescue in irb_binding'
LoadError (Unable to autoload constant ActiveStorage::Blob::Analyzable, expected /usr/local/bundle/gems/activestorage-5.2.2/app/models/active_storage/blob/analyzable.rb to define it)
Я использую Rails 5.2.2.