validates_attachment_content_type thoughtbot rails ruby-on-rails heroku amazon-s3 paperclip amazon

ruby on rails - thoughtbot - Paperclip S3-Puede cargar imágenes pero no puede verlas



rails s3 (2)

He creado una aplicación 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).

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

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 aunque estén en el cubo?

Muchas gracias chicos


Cree un archivo con un inicializador de clip llamado:

# 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 puedes colocar esto dentro de 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'', }


En primer lugar, la url que está intentando usar allí en su código es la siguiente:

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

Cuando visita ese enlace en el navegador, ve lo 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>

Entonces, si modificamos la url usando el punto final correcto obtenemos esto:

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

Lo que sí devuelve la imagen correcta.

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

Hay un montón de artículos sobre cómo hacer que Paperclip, S3 y los cubos europeos jueguen bien juntos.

Sin embargo, he descubierto que desde que comencé a usar la gema asset_sync , que utiliza la gema Fog en lugar de la gema aws-s3, no tengo más problemas con el clip y el S3.

Entonces sospecho que Fog tiene algo que ver con hacer que este problema desaparezca para mí. Recomiendo cambiar a él, si estás usando otra cosa.