Rails 3 - Amazon S3 Paperclip EU问题

Amm*_*mar 11 upload amazon-s3 paperclip ruby-on-rails-3

我正在使用:

Paperclip 2.3.16
Rails 3.0.9
Ruby 1.9.2
AWS - S3 0.6.2
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用回形针将上传到欧盟(爱尔兰)的桶.我的模型中有以下内容:

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'
Run Code Online (Sandbox Code Playgroud)

在我的environment.rb中,我使用以下方法将write设置为使用AWS/s3默认主机到相关的EU主机:

require "aws/s3"
AWS::S3::DEFAULT_HOST.replace "s3-eu-west-1.amazonaws.com"
Run Code Online (Sandbox Code Playgroud)

这很好用,它允许我上传图像,我可以使用AWS Management控制台验证图像上传/删除.

但是,我在尝试在我的网站上显示图像时遇到问题.图片无法加载,我已确定原因,因为生成的URL使用旧的默认主机.例如:

应该是什么: https ://s3-eu-west-1.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg

实际上是什么: http ://s3.amazonaws.com/fsight/flyers/50/full/4759543368588654950.jpg?1314801178

如您所见,它使用旧的默认主机.

我试过放置:

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

但后来开始收到以下错误:

 wrong number of arguments (0 for 1)

Extracted source (around line #9):

 <img src= <%= @event.image.url(:original) %>
Run Code Online (Sandbox Code Playgroud)

我知道Paperclip在使用EU Buckets方面存在一些问题,但有人可以帮我解决这个问题吗?

小智 31

您不再需要解决欧盟问题.

回形针中的默认aws-s3存储后端被AWS SDK for Ruby取代,这也是使用AWS时的亚马逊推荐方式.

只需插入

gem 'aws-sdk'
Run Code Online (Sandbox Code Playgroud)

进入你的Gemfile并运行bundle install.

如果您需要https://s3-eu-west-1.amazonaws.com/some_path_goes_here之类的内容,请尝试has_attached_file使用以下选项配置您的模型

: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"
Run Code Online (Sandbox Code Playgroud)

如果您不想使用https,可以删除:s3_protocol,如果您想更改区域,选项:s3_host_name是正确的方法.您也可以将其放入配置文件中.

希望这可以帮助.


Arn*_*met 8

你尝试过这种解决方法吗?

Paperclip et les欧洲S3水桶

甚至这个?

回形针,S3和欧洲铲斗


Kra*_*eFx 5

我补充道

Paperclip::Attachment.default_options[:s3_host_name] = 's3-eu-west-1.amazonaws.com'
Run Code Online (Sandbox Code Playgroud)

到初始化文件夹中的paperclip.rb,它对我来说很好.