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是正确的方法.您也可以将其放入配置文件中.
希望这可以帮助.
我补充道
Paperclip::Attachment.default_options[:s3_host_name] = 's3-eu-west-1.amazonaws.com'
Run Code Online (Sandbox Code Playgroud)
到初始化文件夹中的paperclip.rb,它对我来说很好.
| 归档时间: |
|
| 查看次数: |
7939 次 |
| 最近记录: |