2012-05-27 10 views

Respuesta

6

Es posible configurar su depósito como sitio web utilizando una API de ruby. Encontré una solución, pero esta usa la gema aws-s3, no la gema aws-sdk. He encontrado esta solución en el 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) 

EDITAR también se podría utilizar la gema fog para lograr esto.

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

no es ideal, pero lamentablemente no lo hace parece que la escala de derechos o aws ruby ​​sdks lo soportan sin caer al nivel de http. – davidjnelson

+0

Creo que es posible agregar esta característica dentro de 'aws-sdk'. No tuve tiempo para completarlo todavía, pero eche un vistazo a [esta esencia] (http://gist.github.com/3712325). Se genera un error de autenticación en 's3.client.set_bucket_website'. – hjblok

+0

hjblok - ¡excelente pensamiento! Usar el appfog ruby ​​sdk lo resolvió totalmente !!! ¡¡Gracias!! – davidjnelson

-3

@Aljoscha AWS S3 es solo una solución de almacenamiento, para almacenar todos sus archivos. No proporciona ningún tipo de solución de tiempo de ejecución. Necesita tener una instancia de Ec2 para alojar su aplicación basada en ruby ​​o bien para usar la API de ruby. Puede alojar un sitio web estático en S3 pero no puede ejecutar ningún tipo de aplicación.

+0

Desafortunadamente parecen haber entendido mal la pregunta. Quiero convertir un cubo en un sitio web, utilizando la API de Amazon descrita anteriormente. Estoy buscando una biblioteca de ruby ​​que admita esta operación en un objeto de cubeta. Obviamente, no es necesario que el código se ejecute "en S3", ya que solo es una solución de almacenamiento, tal como lo indicó correctamente. – MoMolog

+0

Hola Jeevan, Alojscha está tratando de hacer el equivalente de esta solicitud http con un contenedor de rubd sdk: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html – davidjnelson

1

Version uno de AWS SDK para Ruby tiene el método #configure_website para objetos de cubo. Así que algo como esto funcionaría:

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 

(el bloque de configure_website puede omitirse si no es necesario configurar las opciones no predeterminadas)

+0

desafortunadamente este enfoque ya no funciona con la API actual. AWS :: S3 no está definido ... Aws :: S3 es un módulo –

+1

Esta respuesta fue para la versión 1 del SDK de Ruby AWS que todavía se admite y sigue funcionando bien. Usa 'gem 'aws-sdk-v1'' o' gem' aws-sdk ',' ~ 1.0'' en tu 'Gemfile' para obtenerlo, o consulta la documentación para más detalles. – Guss

Cuestiones relacionadas