2009-08-20 130 views
2

我試圖使用aws-s3 gem訪問我的Amazon S3帳戶,但無論我做什麼,我都無法打印存儲桶列表。在Sinatra中使用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 

我不是太有經驗豐富的紅寶石,我只是缺少明顯的東西?

回答

8

問題是您正在嘗試輸出整組桶,但沒有字符串序列化方法,這就是爲什麼您會收到此錯誤。

試試這個:

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 %> 
+0

謝謝,Ruby是令人沮喪的。 – arbales 2009-08-20 20:06:12

9

你真的應該在計算器粘貼之前,混淆你的AWS secred_access_key,或至少現在改變有人開始用你的水桶打之前...

相關問題