Мое приложение хранит файлы на AWS S3. Когда файлы извлекаются, некоторые из них не имеют поля метаданных. Я хотел бы написать службу, которая позволяет мне проверять файлы, чтобы увидеть, присутствует ли поле метаданных и действительно ли они после их получения с S3. Я чувствую, что это должно быть так просто, как my_object.show_metadata
, но у меня проблемы с поиском решения. Существует метод AWS::S3::Object#metadata
, но когда я пытаюсь использовать его я получаю следующее сообщение об ошибке:Как программно читать метаданные с объекта AWS S3 в Rails?
*** NoMethodError Exception: undefined method `set?' for # < Hash::0x007ffa547a9350>
Любое понимание или вопросы, чтобы помочь мне найти слепое пятно на этом один ценится.
ОБНОВЛЕНИЕ: проблема решена. Правильный способ делать то, что задает этот вопрос, на самом деле - это метод AWS::S3::Object#metadata
. В этом случае проблема заключается в том, что разрешения должны быть явно заданы при создании объекта S3. Перед исправлением:
Aws::S3::Object.new(
region: 'us-east-1',
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
bucket_name: "foo",
key: key
)
После исправления:
Aws.config.update({
credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
})
Aws::S3::Object.new(
region: 'us-east-1',
bucket_name: "foo",
key: key
)
После настройки моего кода я был в состоянии использовать все методы AWS S3 успешно, в том числе #metadata
.
Это хорошая идея для вас, чтобы добавить свое редактирование в качестве ответа и принять его. Таким образом, люди могут видеть, что этот вопрос имеет ответ в результатах поиска. –
@TomManterfield Спасибо, все еще изучая веревки! – sammms