2013-10-13 32 views
6

Próbuję skonfigurować punkt końcowy, który jest zwracany z spinacza, gdy mój obiekt zostanie pomyślnie przesłany do usługi Amazon S3. Przesyłanie i wszystko działa poprawnie, ale zwracany adres URL jest nieprawidłowy w przypadku wyświetlania przesłanego pliku.Rails 4, spinacz do papieru, Amazon S3 Config Amazon Path

W tej chwili adres URL, który jest zwracany, to http://s3.amazonaws.com/path/to/my/items (jak widać na poniższym obrazku).

Zamiast s3.amazonaws.com chciałbym korzeń być specyficzne dla lokalizacji wiadra (np s3-us-west-1.amazonaws.com/path/to/my/items)

enter image description here

Gdzie powinienem spróbować skonfigurować inną ścieżkę URL (od s3.amazonaws.com do czegoś innego)? Próbowałem dodać adres URL z powyższą ścieżką do mojego pliku konfiguracyjnego, takiego jak:

#Paperclip Amazon S3 
    config.paperclip_defaults = { 
     :storage => :s3, 
     :url => "https://s3-us-west-1.amazonaws.com/", 
     :s3_credentials => { 
      :bucket => ENV['S3_BUCKET_NAME'], 
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 

     } 

    } 

Który nie wydawał się mieć żadnego efektu. Proszę doradzić, gdzie powinienem ustawić tę opcję!

Z góry dziękuję!

+0

** ** 'Zamień: URL =>„https://s3-us-west-1.amazonaws.com/ "** z **': s3_host_name => 's3-us-west-1.amazonaws.com'' i będziesz dobry. –

Odpowiedz

11

Jeśli zamierzasz używać S3, okazało się, że musisz dołączyć referencje S3 do rzeczywistego modelu (nie tylko do plików konfiguracyjnych). Oto, co robimy:

model

#Image Upload 
Paperclip.options[:command_path] = 'C:\RailsInstaller\ImageMagick' 
has_attached_file :image, 
     :styles => { :medium => "x300", :thumb => "x100" }, 
     :default_url => "****", 
     :storage => :s3, 
     :bucket => '****', 
     :s3_credentials => S3_CREDENTIALS, 
      :url => "/:image/:id/:style/:basename.:extension", 
      :path => ":image/:id/:style/:basename.:extension" 

config/environment.rb

# Paperclip (for Amazon) (we use EU servers) 
    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_host_name => 's3-eu-west-1.amazonaws.com' 
    } 

config/s3.yml

#Amazon AWS Config 
development: 
    access_key_id: ********** 
    secret_access_key: ************** 
    bucket: **** 

production: 
    access_key_id: *********** 
    secret_access_key: *********** 
    bucket: **** 

Mam nadzieję, że to pomaga?

+2

Możesz także umieścić klucz ': s3_host_name' w ** modelu **. –

+0

Zamiast zapisywać moje poświadczenia w każdym Modelu, musiałem po prostu zapisać go w config/aws.yml i działało. –

0

Też miałem ten sam problem podczas migracji do Spree 2.2 i nadal nie jestem pewien, jak rozwiązać ten problem we właściwy sposób. Wygląda na to, że Paperclip powinien zaktualizować ścieżkę z konfiguracji, ale tak nie jest.

Brakuje lepsze rozwiązanie, mam przesłonięte klasę Spree :: obrazu tak:

1 Spree::Image.class_eval do 
2 has_attached_file :attachment, 
3  styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' }, 
4  default_style: :product, 
5  url: '/spree/products/:id/:style/:basename.:extension', 
6  path: 'products/:id/:style/:basename.:extension', 
7  convert_options: { all: '-strip -auto-orient -colorspace sRGB' }· 
8 end 
0

Po kilku eksperymentach I odkryli, że ustawienie :s3_host_name globalnie wystarczy. Skończyłem z tym samym problemem, ponieważ ustawiałem :s3_region, który był używany przez Paperclip (post-4.3.1, z aws-sdk 2) do przechowywania załączników, ale nie podczas generowania adresów URL.

To może być również interesująca dla czytelników, którzy kończą się na tym problemie: https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3