Проблемы с привязкой Perl к Rackspace Cloud API и установкой/получением метаданных объекта

Использование неофициальной привязки Perl к Rackspace Cloud API [Github], я не могу ни за что установить или получить метаданные данного объекта.

Я могу успешно извлечь файлы из облака, но когда я вызываю object_metadata, как указано в документации, я получаю сообщение об ошибке, жалующееся на uninitialized value. Я могу проверить через диспетчер облачных файлов, что в метаданных установлено значение для Status. Я даже пытался проверить X-Object-Meta-Status (безуспешно).

Соответствующий код выглядит следующим образом:

# authentication
# set $container to pre-made container
my @files = $container->objects(prefix => 'tainted/')->all;
FILE: foreach my $file(@files) {

  # throws undefined // have tried capitalized and not, quotes and none
  next FILE if $file->object_metadata->{'status'} != '-1';

  # download file from object & do stuff with it

  # does not update object in cloud (not sure if anything id done locally)
  $file->object_metadata({ status => $status });

}

Как я уже сказал, объекты успешно извлекаются, я просто не могу просматривать метаданные в данном файле. Я играл с некоторыми вариациями того, что выше, но каждое испытание нового подхода требует пропускной способности (денег!). Любая помощь будет очень высоко ценится!


person Dan    schedule 01.11.2012    source источник
comment
Что на самом деле в метаданных? Попробуйте использовать Data::Dumper для проверки структуры $file->object_metadata.   -  person friedo    schedule 01.11.2012
comment
print Dumper($file->object_metadata); выводит $VAR1 = {}; для каждого $file.   -  person Dan    schedule 01.11.2012
comment
Я зашел на сайт Rackspace и открыл окно чата с продавцом. Он предлагает мне бесплатную пробную учетную запись на 20 фунтов стерлингов, которую можно использовать в качестве песочницы. Я понятия не имею, сколько служения это дает вам, но я предлагаю вам сделать то же самое.   -  person simbabque    schedule 02.11.2012
comment
Большое спасибо, @simbabque! Это очень полезно. Я посмотрю, что они могут сделать для меня.   -  person Dan    schedule 02.11.2012
comment
Вот ссылка: rackspace.co.uk/legal/promotions/november-promotion   -  person simbabque    schedule 02.11.2012


Ответы (1)


У меня такое ощущение, что метаданные вообще не устанавливаются. Давайте посмотрим на WebService::Rackspace::CloudFiles::Object, созданный с использованием Moose:

has 'object_metadata' => (
    is => 'rw',
    isa => 'HashRef',
    required => 0,
    default => sub {
        return {};
    }
);

Итак, есть необязательное свойство object_metadata, которое можно получить с помощью встроенного селектора. Здорово!

Объекты, возвращаемые $container->objects, создаются в WebService::Rackspace::CloudFiles::Container примерно так (обрезано):

foreach my $bit (@bits) {
  push @objects,
    WebService::Rackspace::CloudFiles::Object->new(
    cloudfiles => $self->cloudfiles,
    container => $self,
    name => $bit->{name},
    etag => $bit->{hash},
    size => $bit->{bytes},
    content_type => $bit->{content_type},
    last_modified => $bit->{last_modified},
  );
}

Так что, если я правильно понимаю, в этом вызове нет свойства object_metadata, и это нормально, потому что оно необязательно. Но если он не установлен, имеет смысл получить пустой хэш-ссылку, не так ли?

Я бы сказал, что вы могли бы залатать это в себе. :-/


Я еще немного покопался: в документах CloudFiles говорит, что метаданные возвращаются в HTTP-заголовке результата. документы о том, как получить метаданные сам по себе дает хорошее объяснение того, как он передается. Но, к сожалению, в модуле точно не происходит разбора этого.

person simbabque    schedule 01.11.2012