2

我正在尝试使用 aws-s3 gem 访问我的 Amazon 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

我对 Ruby 没有太多经验,我只是错过了一些明显的东西吗?

4

2 回答 2

9

您确实应该在将 AWS secred_access_key 粘贴到 stackoverflow 之前对其进行混淆,或者至少在有人开始使用您的存储桶之前立即更改它......

于 2009-10-19T14:10:50.823 回答
8

问题是您正在尝试输出整组存储桶,但没有字符串序列化方法,这就是您收到此错误的原因。

试试这个:

应用程序.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 %>
于 2009-08-20T06:42:25.050 回答