简体   繁体   English

在Sinatra中使用AWS :: S3列出存储桶

[英]Listing 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 a bucket list. 我正在尝试使用aws-s3 gem访问我的Amazon S3帐户,但无论我做什么,我甚至无法打印存储桶列表。

Error: 错误:

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

From 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? 我对Ruby没有太多经验,我只是错过了一些明显的东西吗?

你真的应该先将你的AWS secred_access_key混淆,然后在stackoverflow上粘贴它,或者至少在有人开始玩你的桶之前改变它...

the problem is that you are trying to output the whole set of buckets, but there is no string serialization method, that's why you're getting this error. 问题是你正在尝试输出整个存储桶集,但是没有字符串序列化方法,这就是你得到这个错误的原因。

Try this one: 试试这个:

app.rb 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 查看: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 查看:bucket.erb

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM