2011-08-31 15 views
10

Używam:Rails 3 - Amazon S3 Spinacz UE Problem

Paperclip 2.3.16 
Rails 3.0.9 
Ruby 1.9.2 
AWS - S3 0.6.2 

Próbuję użyć spinacza przesyłanie do UE (Irlandia) wiadra oparte. Mam następujący w moim modelu:

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' 

W moim environment.rb mam ustawić zapis korzystania z AWS/s3 domyślnego hosta do odpowiedniej UE za pomocą jednego:

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

to działa dobrze, i pozwala mi przesłać obrazy, a ja mogę zweryfikować załadowanie/usunięcie obrazu przy użyciu konsoli zarządzania AWS.

Mam jednak problem podczas próby wyświetlenia obrazów w mojej witrynie. Obrazy nie ładują się i zidentyfikowałem przyczynę, ponieważ wygenerowany adres URL używa starego domyślnego hosta. Np:

Co powinno być: https://s3-eu-west-1.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg

Co to właściwie jest:http://s3.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg?1314801178

Jak widać, to używa starej domyślnego hosta.

Próbowałem zamieszczenia:

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

Ale potem zaczął otrzymywać następujący błąd:

wrong number of arguments (0 for 1) 

Extracted source (around line #9): 

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

wiem Spinacz ma pewne problemy z użyciem chwytaki UE, ale może ktoś mi w tym pomóc?

Odpowiedz

8

Czy próbowałeś tego obejścia?

Paperclip et les European S3 buckets

Albo nawet ten jeden?

Paperclip, S3, and European Buckets

+0

Wypróbowałem drugi, jak widać w pytaniu. Nie wiedziałem, że pierwszy nadal działa, spróbuję go teraz. Dzięki za wskaźnik :) Dam ci znać, jak to działa. – Ammar

+1

Cześć, Jak już powiedziałem, spróbowałem drugiego, a teraz próbowałem pierwszego, oba bez skutku. Mogę przesłać dane do pracy, ale z jakiegoś powodu, adres URL wygenerowany w celu pobrania obrazu z kubełka S3 jest zawsze błędny, jak stwierdzono w pytaniu, jakiejkolwiek pomocy? – Ammar

1

sam problem, po prostu rozwiązać przechodząc następującą opcję has_attached_file:

:url => ':s3_domain_url' 

Więcej informacji można znaleźć tutaj 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

Nie potrzeba do pracy w UE Problem już.

Domyślnym backendem pamięci masowej aws-s3 w spinaczu był replaced by the AWS SDK for Ruby, który jest również zalecanym przez Amazon sposobem pracy z AWS.

Wystarczy włożyć

gem 'aws-sdk' 

do swojej Gemfile i uruchomić bundle install.

Jeśli chcesz coś podobnego https://s3-eu-west-1.amazonaws.com/some_path_goes_here, spróbuj skonfigurować model na has_attached_file z następującymi opcjami

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

Jeśli nie chcesz korzystać z https można usunąć :s3_protocol i jeśli chcesz zmienić region , opcja :s3_host_name to właściwa droga. Możesz również umieścić to w pliku konfiguracyjnym.

Mam nadzieję, że to pomoże.

+0

Dzięki @toashd to naprawdę mi pomogło. Zauważ również, że host s3 można określić w pliku s3.yml jako 's3_host_name: 's3-eu-west-1.amazonaws.com''. Musiałem również określić 's3_endpoint: 's3-eu-west-1.amazonaws.com'', aby uzyskać zadanie rake do migracji lokalnych plików. – Leo

5

dodałem

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

do paperclip.rb w folderze initializers i działa dobrze dla mnie.