在使用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
答案 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']
}
}
不知道您的默认区域是什么。将其更改为正确的区域并尝试。解决方案是确定问题,而不是纠正问题。