2011-08-31 24 views
10

sto usando:Rails 3 - Amazon S3 Paperclip UE Problema

Paperclip 2.3.16 
Rails 3.0.9 
Ruby 1.9.2 
AWS - S3 0.6.2 

Sto cercando di utilizzare graffetta il caricamento verso l'UE (Irlanda) secchio base. Ho il seguente nel mio modello:

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' 

Nel mio environment.rb ho impostato la scrittura di utilizzare l'AWS/s3 predefinito Host per l'UE pertinente uno utilizzando:

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

questo funziona bene, e mi permette di caricare le immagini, e posso verificare l'upload/eliminazione delle immagini usando il consolatore di gestione AWS.

Tuttavia, ho un problema durante il tentativo di visualizzare le immagini sul mio sito. Le immagini non vengono caricate e ho identificato la causa, poiché l'URL generato utilizza il vecchio host predefinito. Ad esempio:

quello che dovrebbe essere: https://s3-eu-west-1.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg

ciò che effettivamente è:http://s3.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg?1314801178

Come si può vedere, si utilizza il vecchio host predefinito.

ho cercato immissione:

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

Ma poi ha cominciato a ricevere il seguente errore:

wrong number of arguments (0 for 1) 

Extracted source (around line #9): 

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

So Paperclip ha alcuni problemi con l'utilizzo Benne UE, ma Qualcuno potrebbe aiutarmi con questo?

risposta

8

Hai provato questa soluzione alternativa?

Paperclip et les European S3 buckets

O anche questo?

Paperclip, S3, and European Buckets

+0

Ho provato il secondo, come potete vedere nella domanda. Non ero a conoscenza del fatto che il primo funzionasse ancora, lo proverò ora. Grazie per il puntatore :) Ti farò sapere come va. – Ammar

+1

Salve, come ho detto ho provato il secondo, e ora ho provato il primo, entrambi senza alcun risultato. Posso caricare il caricamento ma, per qualche motivo, l'URL generato per recuperare l'immagine dal bucket S3 è sempre errato, come indicato nella domanda, qualsiasi aiuto? – Ammar

1

Stesso problema qui, appena risolto passando la seguente opzione per has_attached_file:

:url => ':s3_domain_url' 

Per maggiori informazioni vedi qui 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

Non è necessario per aggirare il problema UE più.

Il backend di archiviazione aws-s3 predefinito in paperclip era replaced by the AWS SDK for Ruby, che è anche il metodo consigliato da Amazon quando si lavora con AWS.

Basta inserire

gem 'aws-sdk' 

nella vostra Gemfile ed eseguire bundle install.

Se si desidera qualcosa di simile https://s3-eu-west-1.amazonaws.com/some_path_goes_here, provare a configurare di has_attached_file vostro modello con le seguenti opzioni

: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" 

Se non si desidera utilizzare https è possibile rimuovere il :s3_protocol e se si desidera cambiare la regione , l'opzione :s3_host_name è la giusta strada da percorrere. Puoi anche inserirlo in un file di configurazione.

Spero che questo aiuti.

+0

Grazie a @toashd questo mi ha davvero aiutato. Nota anche che l'host s3 può essere specificato nel tuo file s3.yml come 's3_host_name: 's3-eu-west-1.amazonaws.com'. Dovevo anche specificare 's3_endpoint: 's3-eu-west-1.amazonaws.com' per ottenere un rake task per la migrazione dei file locali funzionanti. – Leo

5

ho aggiunto

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

al paperclip.rb nella cartella inizializzatori e funziona bene per me.

Problemi correlati