【问题标题】:Rails 3 - Amazon S3 Paperclip EU ProblemRails 3 - Amazon S3 回形针欧盟问题
【发布时间】:2011-11-07 15:15:07
【问题描述】:

我正在使用:

Paperclip 2.3.16
Rails 3.0.9
Ruby 1.9.2
AWS - S3 0.6.2

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

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'

在我的 environment.rb 中,我已通过以下方式将写入设置为使用 AWS/s3 默认主机到相关的欧盟:

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

这很好用,它允许我上传图片,我可以使用 AWS 管理控制台验证图片上传/删除。

但是,我在尝试在我的网站上显示图像时遇到了问题。图像无法加载,我已确定原因,因为生成的 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

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

 wrong number of arguments (0 for 1)

Extracted source (around line #9):

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

我知道 Paperclip 在使用 EU Buckets 时遇到了一些问题,但有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: ruby-on-rails-3 upload amazon-s3 paperclip


    【解决方案1】:

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

    回形针中默认的 aws-s3 存储后端是replaced by the AWS SDK for Ruby,这也是亚马逊在使用 AWS 时推荐的方式。

    只需插入

    gem 'aws-sdk'
    

    进入您的 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"
    

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

    希望这会有所帮助。

    【讨论】:

    • 感谢@toashd 这真的帮助了我。另请注意,可以在 s3.yml 文件中将 s3 主机指定为 s3_host_name: 's3-eu-west-1.amazonaws.com'。我还必须指定 s3_endpoint: 's3-eu-west-1.amazonaws.com' 来获得用于迁移本地文件的 rake 任务。
    【解决方案2】:

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

    Paperclip et les European S3 buckets

    还是这个?

    Paperclip, S3, and European Buckets

    【讨论】:

    • 我尝试了第二个,正如您在问题中看到的那样。我不知道第一个仍然有效,我现在试试。感谢您的指点:)我会告诉你进展如何。
    • 嗨,如前所述,我尝试了第二个,现在我尝试了第一个,均无济于事。我可以让上传工作,但由于某种原因,生成的从 S3 存储桶中获取图像的 URL 总是错误的,如问题中所述,有什么帮助吗?
    【解决方案3】:

    我加了

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

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

    【讨论】:

      【解决方案4】:

      同样的问题,只是解决了将以下选项传递给 has_attached_file

      :url => ':s3_domain_url' 
      

      更多信息请看这里http://rubydoc.info/gems/paperclip/Paperclip/Storage/S3

      通常,这一点都不重要,您可以保留默认值(即路径样式,或 :s3_path_url)。但在某些情况下路径不起作用,您需要使用域样式 (:s3_domain_url)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        • 1970-01-01
        • 2012-04-15
        • 2011-08-09
        • 2011-10-06
        • 2011-03-27
        • 1970-01-01
        相关资源
        最近更新 更多