Paperclip使用S3在Heroku上传

时间:2014-08-18 04:26:58

标签: ruby-on-rails ruby heroku amazon-s3 paperclip

我很遗憾地重复一个旧的抱怨,但我在我的智慧结束,不知道下一步该去哪里。我在Heroku上使用Paperclip并配置了S3上传。我能够在我的本地开发环境中工作,但是一旦它在Heroku上运行我遇到了这个错误:

AWS::S3::Errors::PermanentRedirect (The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.

我已经搜索了这个错误并阅读了Heroku文档,我相信我已经正确设置了所有内容。我最初认为我的问题源于我在s3-us-west-1.amazonaws.com地区的斗,但我不再相信了。

以下是我的Heroku配置的相关部分:

AWS_REGION:                      us-west-1
S3_BUCKET_NAME:                  my-super-awesomely-amazing-bucket

来自我的config / environments / production.rb文件:

  config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
      :bucket => ENV['S3_BUCKET_NAME'],
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    } 
  }

我的paperclip.rb初始化文件:

if Rails.env.production? 
  Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
  Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
  Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-1.amazonaws.com'
end

我的回形针配置来自相关模型:

has_attached_file :document,
:styles => { },
:default_url => "/image_styles/:style/missing.png"

那么......我在这里做错了什么?在这一点上,我确信我已经错过了一些明显的东西,但我很难过这里去的地方。我觉得我已经刻苦地配置了一切,但PermanentRedirect错误不断出现。

2 个答案:

答案 0 :(得分:3)

<强>铲斗

这可能不是直接的解决方案,但我们发现您必须在bucket块的之外添加s3_credentials选项

#config/environments/production.rb
config.paperclip_defaults = {
    storage: :s3,
    s3_host_name: 's3-eu-west-1.amazonaws.com',
    s3_credentials: {
      access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
    },
    bucket: ENV['S3_BUCKET_NAME']
}

这对Heroku来说是100%的工作,但是它是否会为你工作(因为你的桶位于不同的区域)是另一回事

如果您需要更多帮助,请发表评论,我很乐意为您提供一些想法

答案 1 :(得分:0)

试试此链接http://adamthedeveloper.blogspot.in/2014/02/awss3permanentredirect-bucket-you-are.html。以前这只发生在欧洲地区的桶中,并通过设置AWS::S3::DEFAULT_HOST得到解决。希望这能解决您的问题。