2009-08-20 9 views
2

Ich versuche, mit dem Juwel von aws-s3 auf meinen Amazon S3-Account zuzugreifen, aber egal, was ich tue, kann ich nicht einmal eine Bucket-Liste drucken.Inserieren von Buckets mit AWS :: S3 in Sinatra

Fehler:

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

Von Code:

# 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 

Ich bin auch nicht mit Rubin erlebt, bin ich nur fehlt etwas offensichtlich?

Antwort

8

Das Problem ist, dass Sie versuchen, die gesamte Gruppe von Buckets ausgeben, aber es gibt keine Zeichenfolge Serialisierungsmethode, deshalb erhalten Sie diesen Fehler.

Versuchen Sie dieses:

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 

Ausblick: 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> 

Ausblick: bucket.erb

<h1>Bucket: <%= @bucket.name %> Objects</h1> 
<% @bucket.objects.each do |obj| %> 
    Object: <%= obj.key %> <%= obj.about['content-length'] %> bytes<br/> 
<% end %> 
+0

Danke, Ruby frustrierend. – arbales

9

Sie wirklich Ihre AWS secred_access_key es bei Stackoverflow vor dem Einfügen verschleiern sollten, oder zumindest ist es jetzt ändern, bevor jemand mit Ihrem Eimer beginnt zu spielen ...