Перечисление ведер с AWS :: S3 в Синатре - PullRequest
2 голосов
/ 20 августа 2009

Я пытаюсь получить доступ к своей учетной записи Amazon S3 с помощью гема aws-s3, но независимо от того, что я делаю, я не могу даже напечатать список сегментов.

Ошибка:

undefined method `bytesize' for #<AWS::S3::Bucket:0x1b9e488>

Из кода:

# hello_world.rb
require 'rubygems'
require 'sinatra'
require 'aws/s3'

get '/' do
  connection = AWS::S3::Base.establish_connection!(
     :access_key_id     => '***',
     :secret_access_key => '***'
   )
  AWS::S3::Service.buckets
end

Я не слишком опытен с Руби, я просто упускаю что-то очевидное?

Ответы [ 2 ]

9 голосов
/ 19 октября 2009

Вы действительно должны запутать свой AWS secred_access_key перед вставкой его в stackoverflow или, по крайней мере, изменить его сейчас, прежде чем кто-то начнет играть с вашими ведрами ...

8 голосов
/ 20 августа 2009

проблема в том, что вы пытаетесь вывести весь набор сегментов, но нет метода сериализации строк, поэтому вы получаете эту ошибку.

Попробуйте это:

app.rb

require 'rubygems'
require 'sinatra'
require 'aws/s3'

include AWS::S3

def s3_connect
  Base.establish_connection!(
    :access_key_id     => 'THISISMYACCESSKEYITMAYNOTBETHEBESTBUTITISMINE',
    :secret_access_key => 'HERPADERPSECRETKEYISSECRET'
  )
end

get '/' do
  s3_connect
  @buckets = Service.buckets
  erb :index
end

get '/bucket/:key' do
  s3_connect
  @bucket = Bucket.find(params[:key])
  erb :bucket
end

Просмотр: index.erb

<h1>Buckets</h1>
<ul>
  <% @buckets.each do |b| %>
    <li><a href='/bucket/<%= b.name %>'><%= b.name %></a> (<%= b.objects.length %> objects)</li>
  <% end %>
</ul>

Вид: bucket.erb

<h1>Bucket: <%= @bucket.name %> Objects</h1>
<% @bucket.objects.each do |obj| %>
  Object: <%= obj.key %> <%= obj.about['content-length'] %> bytes<br/>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...