2009-08-20 5 views
2

aws-s3の宝石を使用して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 

ビュー:

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

ビューindex.erb:

bucket.erb

、このいずれかを試してみてください210

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

おかげで、Rubyはイライラさせられます。 – arbales

9

あなたは本当にのstackoverflowでそれを貼り付ける前に、AWSのsecred_access_keyを難読化すべきか、誰かがあなたのバケツに再生を開始する前に、少なくとも今それを変更...

関連する問題