2012-08-11 19 views
15

Me crearon una aplicación de Rails que se ejecuta en Heroku, con Paperclip y S3. Logré subir imágenes a mi cubo S3 a través del sitio (puedo verlas aparecer en mi cubo en el panel de control de Amazon).Paperclip S3 - Puede cargar imágenes pero no puede verlas

Pero cuando agrego una etiqueta de imagen, es decir <% = image_tag x.photo.url%>, obtengo el siguiente html (etiquetas omitidas aquí), ¡sin mostrar la imagen!

img alt = "Test_tree" src = "http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg?1344661020"

Por favor, ayuda! ¿Por qué no puedo ver las imágenes a pesar de que están en el cubo?

Gracias chicos tanto

+0

Comprobar [mi respuesta] (http://stackoverflow.com/a/ 25080586/316700) – fguillen

Respuesta

11

En primer lugar, la URL que está intentando utilizar hasta allí en su código es la siguiente:

http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg 

Cuando visita el vínculo en el navegador, vea el siguiente:

<message> 
    The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. 
</Message> 
<RequestId>810A6AE1D141304C</RequestId> 
<Bucket>hiphotos</Bucket> 
<HostId> 
    XXZ+s+slgZLsRWy5NiU/G0yAKBLftw0oT2dDKpas532qXJEPSrISVPqfZsEgpb2J 
</HostId> 
<Endpoint>hiphotos.s3.amazonaws.com</Endpoint> 

Así que si modificamos el URL usando el punto final correcto obtenemos esto:

http://hiphotos.s3.amazonaws.com/ads/photos/000/000/015/original/test_tree.jpg 

Que devuelve la imagen correcta.

Si está utilizando cubos europeos, esto puede suceder, y puede ser la culpa de la gema que está utilizando para enviar cosas a s3.

Hay muchos artículos sobre cómo hacer que Paperclip, S3 y cubos europeos jueguen bien juntos.

He encontrado, sin embargo, que desde que comencé a usar la gema asset_sync, que usa Niebla en lugar de gema aws-s3, no tengo más problemas con el clip y el S3.

Así que sospecho que Fog tiene algo que ver con hacer que este problema desaparezca para mí. Yo recomendaría cambiar a él, si estás usando algo más.

+2

Usted, mi amigo, es una persona hermosa :) Pasé dos días trabajando en esto - su sugerencia lo resolvió. Tuve que agregar esto a mi modelo: : url => ": s3_domain_url", : path => (lo que sea ... necesario para ser incluido con url si no es un error) ¡Muchísimas gracias! – Misrab

+0

ha, no hay problema! – stephenmurdoch

+0

Gran reafirmación del problema. –

18

Crear un archivo de inicialización de una llamada de clip:

# config/initializers/paperclip.rb 
# We are actually setting this to 's3_domain_url', 
# so it's not a placeholder for something else. 
Paperclip::Attachment.default_options[:url] = ':s3_domain_url' 
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename' 

O también se puede colocar dentro de este production.rb:

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
     :bucket => ENV['S3_BUCKET_NAME'], 
     :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    }, 
    :url =>':s3_domain_url', 
    :path => '/:class/:attachment/:id_partition/:style/:filename', 
} 
+4

Tomé esto para decir que debería poner mi dominio s3 como el valor de la tecla: url. Una hora después de la depuración, veo que paperclip está loco y busca específicamente el valor ": s3_domain_url" para esa clave. ¡TENER CUIDADO! –

+1

Gracias @awesome_person, acabo de hacer un comentario para aclarar esto. – Zorayr

+0

puede agregar la información de @awesome_person como un comentario en la línea de la url? – retroGiant

Cuestiones relacionadas