2012-05-27 12 views

Antwort

6

Es ist möglich, Ihren Bucket als Website mit einer Ruby-API zu konfigurieren. Ich habe eine Lösung gefunden, aber diese verwendet den aws-s3 Edelstein, nicht den aws-sdk Edelstein. Ich fand diese Lösung in den ponyhost gem:

body = '<?xml version="1.0" encoding="UTF-8"?> 
<WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <IndexDocument><Suffix>index.html</Suffix></IndexDocument> 
    <ErrorDocument><Key>404.html</Key></ErrorDocument> 
</WebsiteConfiguration>' 

res = AWS::S3::Base.request(:put, "/#{bucketname}?website", {}, body) 

EDIT Sie auch das fog Juwel dies zu erreichen nutzen könnten.

storage = Fog::Storage.new({ 
    :provider => 'AWS', 
    :aws_access_key_id => 'YOUR_KEY', 
    :aws_secret_access_key => 'YOUR_SECRET', 
    :region => 'eu-west-1' 
}) 

if storage.kind_of?(Fog::Storage::AWS::Real) 
    storage.put_bucket_website("YOUR_BUCKET", "index.html", :key => "404.html") 
end 
+0

nicht ideal, aber leider nicht erscheinen, dass die rights-code oder aws ruby ​​sdks dies unterstützen, ohne auf die http-ebene zu fallen. – davidjnelson

+0

Ich denke, es ist möglich, diese Funktion in 'aws-sdk' hinzuzufügen. Ich hatte noch keine Zeit, es zu vervollständigen, aber werfen Sie einen Blick auf [diesen Text] (http://gist.github.com/3712325). Es verursacht einen Authentifizierungsfehler auf 's3.client.set_bucket_website'. – hjblok

+0

hjblok - tolles Denken! Mit dem Appfog Ruby SDK löste es total !!! Vielen Dank!! – davidjnelson

-3

@Aljoscha AWS S3 ist nur eine Speicherlösung, um alle Ihre Dateien zu speichern. Es bietet keine Laufzeitlösung. Sie benötigen eine Ec2-Instanz, um Ihre Ruby-basierte Anwendung zu hosten oder die Ruby-API zu verwenden. Sie können nur eine statische Website auf S3 hosten, aber keine App ausführen.

+0

Leider scheinen Sie die Frage falsch verstanden zu haben. Ich möchte mit der oben beschriebenen Amazon API einen Bucket in eine Website verwandeln. Ich suche nach einer Ruby-Bibliothek, die diese Operation für ein Bucket-Objekt unterstützt. Der Code ist offensichtlich nicht erforderlich, um "on S3" auszuführen, da es sich nur um eine Speicherlösung handelt, wie Sie es richtig angemerkt haben. – MoMolog

+0

Hey Jeevan, Alojscha versucht, das Äquivalent dieser HTTP-Anfrage mit einem Ruby-SDK-Wrapper zu machen: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html – davidjnelson

1

Version eines AWS SDK für Ruby hat die Methode #configure_website für Eimer Objekte. So etwas wie dies funktionieren würde:

s3 = AWS::S3.new 
b = s3.buckets.create(name, acl: :public_read) 
b.configure_website do |cfg| 
    cfg.options[:index_document] = { suffix: 'index.html' } 
end 

(der Block wegzulassen configure_website werden können, wenn Sie nicht nicht-Standardoptionen festlegen müssen)

+0

Leider funktioniert dieser Ansatz nicht mehr mit der aktuellen API. AWS :: S3 ist undefined ... Aws :: S3 ist ein Modul –

+1

Diese Antwort war für Version 1 des Ruby AWS SDK, das noch unterstützt wird und immer noch einwandfrei funktioniert. Verwenden Sie 'gem 'aws-sdk-v1'' oder' gem' aws-sdk ',' ~ 1.0'' in Ihrer 'Gemfile', um es zu bekommen - oder sehen Sie sich die Dokumentation für Details an. – Guss