无法将文件上传到AWS - Rails应用程序

时间:2017-06-17 21:20:30

标签: ruby-on-rails ruby amazon-web-services amazon-s3 paperclip

在使用Rails重新创建典型的在线书店时,我遇到了一个错误,当我尝试将图片和文件上传到AWS时会出现错误。

以下是我发现的步骤,直至出现此错误:

1 - 设置Amazon Web Services(未发现任何问题)

2 - S3存储(未发现问题):

a)添加了aws gem文件

b)通过向我的application.rb文件添加PaperClip的配置来覆盖PaperClip的默认存储[我想为应用程序运行的每个不同环境使用不同的存储桶]。这是我的代码:

config.active_record.raise_in_transactional_callbacks = true
config.paperclip_defaults = { 
    storage: :s3,
    s3_credentials:{
        bucket: ENV['AWS_BUCKET'],
        access_key_id: ENV['AWS_ACCESS_KEY_ID'],
        secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
    }
}

c)打开.env以将S3凭据添加到文件中。 AWS_BUCKET,AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY

d)还通过添加图像和资源的字段来添加表单文件中的字段。

e)因为PaperClip需要在我们提交之前验证内容类型,所以我按照PaperClip文档的建议在Book.rb模型中添加了简单的验证。

3 - 添加图书图像(和资源)

我认为关于我的AWS S3存储桶的所有内容都已配置并正常工作,但是,当我通过在表单中​​创建新书来上传我的“book”文件时,这是我得到的错误:

Aws::Errors::MissingRegionError in BooksController#create

missing region; use :region option or export region name to ENV['AWS_REGION']

这就是我在书架控制器上的#create:

  def create
    @book = current_user.books.new(book_params)

    respond_to do |format|
      if @book.save
        format.html { redirect_to @book, notice: 'Book was successfully created.' }
        format.json { render :show, status: :created, location: @book }
      else
        format.html { render :new }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end

1 个答案:

答案 0 :(得分:1)

us-east-1设置为env变量AWS_REGION中的区域,并将其指定为默认值。我没试过这个,但看看这个解决方案是否有效。如果是,请找到您所在的地区并进行设置。

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

}

不知道您的默认区域是什么。将其更改为正确的区域并尝试。解决方案是确定问题,而不是纠正问题。