2011-08-31 41 views
10

Tôi đang sử dụng:Rails 3 - Amazon S3 Kẹp giấy EU Vấn đề

Paperclip 2.3.16 
Rails 3.0.9 
Ruby 1.9.2 
AWS - S3 0.6.2 

Tôi đang cố gắng để sử dụng kẹp giấy tải lên sang EU (Ireland) dựa xô. Tôi đã điều sau đây trong mô hình của tôi:

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' 

Trong environment.rb của tôi, tôi đã thiết lập các ghi vào sử dụng AWS/s3 Mặc định chủ sang EU liên quan từng người sử dụng:

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

tác phẩm này tốt, và nó cho phép tôi tải lên hình ảnh, và tôi có thể xác minh việc tải lên/xóa hình ảnh bằng cách sử dụng bộ quản lý AWS.

Tuy nhiên, tôi gặp sự cố khi cố gắng hiển thị hình ảnh trên trang web của mình. Các hình ảnh không tải và tôi đã xác định nguyên nhân, vì URL được tạo sử dụng máy chủ lưu trữ mặc định cũ. Ví dụ:

gì nó nên là: https://s3-eu-west-1.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg

gì nó thực sự là:http://s3.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg?1314801178

Như bạn thấy, nó sử dụng các máy chủ mặc định cũ.

tôi đã cố gắng đặt:

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

Nhưng sau đó bắt đầu nhận được lỗi sau:

wrong number of arguments (0 for 1) 

Extracted source (around line #9): 

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

Tôi biết Kẹp giấy có một số vấn đề với việc sử dụng Gầu EU, nhưng bất cứ ai có thể giúp tôi với điều này?

Trả lời

8

Bạn đã thử cách này chưa?

Paperclip et les European S3 buckets

Hoặc thậm chí cái này?

Paperclip, S3, and European Buckets

+0

Tôi đã thử câu hỏi thứ hai, như bạn có thể thấy trong câu hỏi. Tôi không biết người đầu tiên vẫn làm việc, tôi sẽ thử nó ngay bây giờ. Cảm ơn con trỏ :) Tôi sẽ cho bạn biết nó đi như thế nào. – Ammar

+1

Xin chào, Như đã nói, tôi đã thử câu hỏi thứ hai và bây giờ tôi đã thử lần đầu tiên, cả hai đều không có kết quả. Tôi có thể tải tệp lên để hoạt động, nhưng vì lý do nào đó, URL được tạo để tìm nạp hình ảnh từ thùng S3 luôn sai, như được nêu trong câu hỏi, bất kỳ trợ giúp nào? – Ammar

1

Cùng một vấn đề ở đây, chỉ cần giải quyết thông qua các tùy chọn sau đây để has_attached_file:

:url => ':s3_domain_url' 

Để biết thêm thông thấy ở đây 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

Bạn không cần để giải quyết vấn đề EU nữa.

Phần phụ trợ lưu trữ aws-s3 mặc định trong kẹp giấy là replaced by the AWS SDK for Ruby, đó cũng là cách được đề xuất amazon khi làm việc với AWS.

Chỉ cần chèn

gem 'aws-sdk' 

vào Gemfile của bạn và chạy bundle install.

Nếu bạn muốn một cái gì đó giống như https://s3-eu-west-1.amazonaws.com/some_path_goes_here, hãy thử để cấu hình của has_attached_file mô hình của bạn với các tùy chọn sau

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

Nếu bạn không muốn sử dụng https, bạn có thể loại bỏ các :s3_protocol và nếu bạn muốn thay đổi khu vực , tùy chọn :s3_host_name là đúng cách để đi. Bạn cũng có thể đặt tệp này vào tệp cấu hình.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn @toashd điều này thực sự đã giúp tôi. Cũng lưu ý rằng máy chủ s3 có thể được chỉ định trong tệp s3.yml của bạn là 's3_host_name: 's3-eu-west-1.amazonaws.com''. Tôi cũng phải chỉ rõ 's3_endpoint: 's3-eu-west-1.amazonaws.com'' để có được một tác vụ cào để di chuyển các tệp cục bộ đang hoạt động. – Leo

5

tôi thêm

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

để paperclip.rb trong thư mục khởi tạo và nó hoạt động tốt đối với tôi.

Các vấn đề liên quan