在Heroku上使用S3上传Paperclip文件

3

我很抱歉要重申一个旧的不满,但我已经被逼到了绝境,并不确定接下来该去哪里。我正在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文档,我相信我已经正确设置了一切。我最初认为我的问题源于我的存储桶位于地区,但我现在不再这么认为。
以下是我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个回答

3

Bucket

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

#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上对我们完全有效,但是由于你的桶位于不同的区域,它是否适用于你是另一回事。
如果您需要更多帮助,请留下评论,我很乐意给你一些想法。

1
谢谢你的回答 - 结果问题完全不同。我的问题是我在N. Cali地区创建了一个存储桶。别问我为什么,但那就是问题所在。当我将其更改为在俄勒冈州创建的存储桶时,事情开始正常工作。相当奇怪。 - bitops

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接