2011-08-31 199 views
10

que estoy usando:Carriles 3 - Amazon S3 Paperclip UE Problema

Paperclip 2.3.16 
Rails 3.0.9 
Ruby 1.9.2 
AWS - S3 0.6.2 

Estoy intentando utilizar paperclip la carga a la UE (Irlanda). Balde basada Tengo el siguiente en mi modelo:

has_attached_file :image, :styles => { :grid => '90x128#', :list => '140x200#', :original => '400x548'}, 
      :storage => :s3, 
         :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
         :url => 'flyers/:id/:style/:basename.:extension', 
         :path => 'flyers/:id/:style/:basename.:extension', 
         :bucket => 'fsight' 

En mi environment.rb yo he dado la escritura a utilizar la AWS/s3 servidor por omisión a la UE pertinente uno mediante el uso de:

require "aws/s3" 
AWS::S3::DEFAULT_HOST.replace "s3-eu-west-1.amazonaws.com" 

Estos trabajos bien, y me permite subir las imágenes, y puedo verificar la carga/eliminación de la imagen usando el consolador de administración de AWS.

Sin embargo, tengo un problema al intentar mostrar las imágenes en mi sitio. Las imágenes no se cargan y he identificado la causa, ya que la URL generada usa el viejo host predeterminado. Por ejemplo:

lo que debería ser: https://s3-eu-west-1.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg

lo que realmente es:http://s3.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg?1314801178

Como se puede ver, se utiliza el antiguo host predeterminado.

Me trataron de colocación:

Paperclip.interpolates(:s3_eu_url) do |att, style| 
    "#{att.s3_protocol}://s3-eu-west-1.amazonaws.com/#{att.bucket_name}/#{att.path(style)}" 
end 

Pero entonces comenzó a recibir el siguiente error:

wrong number of arguments (0 for 1) 

Extracted source (around line #9): 

<img src= <%= @event.image.url(:original) %> 

sé Paperclip tiene algunos problemas con el uso Cubos de la UE, pero nadie podía ayudarme con esto?

Respuesta

8

¿Has probado esta solución?

Paperclip et les European S3 buckets

O incluso éste?

Paperclip, S3, and European Buckets

+0

Probé la segunda, como pueden ver en la pregunta. No sabía que el primero todavía funcionaba, lo intentaré ahora. Gracias por el puntero :) Te dejaré saber cómo va. – Ammar

+1

Hola, Como dije, probé la segunda, y ahora probé la primera, ambas en vano. Puedo subir la carga al trabajo, pero por alguna razón, la URL generada para recuperar la imagen del depósito S3 siempre está mal, como se indica en la pregunta, ¿hay alguna ayuda? – Ammar

1

El mismo problema aquí, sólo resolvieron pasar a la siguiente opción has_attached_file:

:url => ':s3_domain_url' 

Para más información ver aquí http://rubydoc.info/gems/paperclip/Paperclip/Storage/S3:

Normally, this won't matter in the slightest and you can leave the default (which is path-style, or :s3_path_url). But in some cases paths don't work and you need to use the domain-style (:s3_domain_url).

30

No es necesario para evitar el problema de la UE.

El back-end de almacenamiento aws-s3 predeterminado en clip era replaced by the AWS SDK for Ruby, que también es el modo recomendado por Amazon cuando se trabaja con AWS.

Sólo tiene que insertar

gem 'aws-sdk' 

en su Gemfile y ejecutar bundle install.

Si quieres algo así como https://s3-eu-west-1.amazonaws.com/some_path_goes_here, intente configurar de has_attached_file su modelo con las siguientes opciones

:storage => :s3, 
:s3_credentials => "#{Rails.root}/config/s3.yml", 
:s3_permissions => :private, 
:s3_protocol => 'https', 
:s3_host_name => 's3-eu-west-1.amazonaws.com', 
:path => ":filename" 

Si no desea utilizar https se puede quitar el :s3_protocol y si desea cambiar la región , la opción :s3_host_name es el camino correcto a seguir. También puede poner esto en un archivo de configuración.

Espero que esto ayude.

+0

Gracias @toashd esto realmente me ayudó. Tenga en cuenta también que el host s3 se puede especificar en su archivo s3.yml como 's3_host_name: 's3-eu-west-1.amazonaws.com''. También tuve que especificar 's3_endpoint: 's3-eu-west-1.amazonaws.com'' para obtener una tarea de rake para la migración de archivos locales en funcionamiento. – Leo

5

que añade

Paperclip::Attachment.default_options[:s3_host_name] = 's3-eu-west-1.amazonaws.com' 

a paperclip.rb en la carpeta inicializadores y funciona muy bien para mí.