List of buckets with AWS :: S3 in Sinatra

I'm trying to access my Amazon S3 account using the aws-s3 gem, but no matter what I do, I can't even print the bucket list.

Mistake:

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

      

From the 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

      

I'm not too experienced with Ruby, am I just missing something obvious?

+2


source to share


2 answers


the problem is that you are trying to output the whole set of buckets, but there is no method to serialize the strings, which is why you are getting this error.

Try the following:

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

      



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

      

View: bucket.erb

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

      

+8


source


You should really confuse your AWS secred_access_key before inserting it into stackoverflow, or at least change it now, before anyone starts playing with your buckets ...



+9


source







All Articles