使用 Paperclip 部署到 Heroku 上传文件时出现 AWS 端点错误
AWS Endpoint Error When Uploading Files Using Paperclip Deploying to Heroku
当我在 Heroku 上使用 Paperclip 上传图片时,它会将图片上传为 http://s3.amazonaws.com/moviereviewnd/movies/images/000/000/005/small/wolf_of_wall_street_ver3_xxlg.jpeg?1424809711
注意:它可以在本地服务器上正常上传 (Ubuntu 14.04)。我已经尝试了在此站点上可以找到的所有内容,但似乎没有任何效果。 Bucket 绝对不是 Eurpoean 桶或类似的东西。我选择了俄勒冈州,当我登录 AWS 时,它显示 https://console.aws.amazon.com/s3/home?region=us-west-2
当您访问上面 URL post 的图像时,它显示 "The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint."。它还说,当您访问上面的 URL 时,端点是:
moviereviewnd.s3.amazonaws.com
有什么想法吗?我已经坚持了几个小时,似乎无法弄清楚。
在我的 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'],
:region => 'us-west-2',
:s3_endpoint => 's3-us-west-2.amazonaws.com'
}
}
但也试过这个:
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'],
:region => 'us-west-2',
:s3_endpoint => 'moviereviewnd.s3.amazonaws.com'
}
}
这两种方式都会产生与此 post 顶部提到的相同 URL 并导致 "must be addressed using the specified endpoint" 消息。
这是我的 Gemfile:
source 'https://rubygems.org'
gem 'rails', '4.2.0'
gem 'sass-rails', '5.0.1'
gem 'uglifier', '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks', '2.3.0'
gem 'jbuilder', '2.2.3'
gem 'sdoc', '0.4.0', group: :doc
gem 'devise', '~> 3.4.1'
gem 'paperclip', '~> 4.2.1'
gem 'aws-sdk', '< 2.0'
gem 'bootstrap-sass', '~> 3.3.3'
gem 'rmagick', '~> 2.13.4'
group :development, :test do
gem 'sqlite3', '1.3.9'
gem 'byebug', '3.4.0'
gem 'web-console', '2.0.0.beta3'
gem 'spring', '1.1.3'
end
group :production do
gem 'pg', '0.17.1'
gem 'rails_12factor', '0.0.2'
end
哇哦!使用 :s3_host_name 而不是 :s3_endpoint 有效!
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'],
:region => 'us-west-2',
:s3_host_name => 's3-us-west-2.amazonaws.com',
:url => ":s3_domain_url"
}
当我在 Heroku 上使用 Paperclip 上传图片时,它会将图片上传为 http://s3.amazonaws.com/moviereviewnd/movies/images/000/000/005/small/wolf_of_wall_street_ver3_xxlg.jpeg?1424809711
注意:它可以在本地服务器上正常上传 (Ubuntu 14.04)。我已经尝试了在此站点上可以找到的所有内容,但似乎没有任何效果。 Bucket 绝对不是 Eurpoean 桶或类似的东西。我选择了俄勒冈州,当我登录 AWS 时,它显示 https://console.aws.amazon.com/s3/home?region=us-west-2
当您访问上面 URL post 的图像时,它显示 "The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint."。它还说,当您访问上面的 URL 时,端点是:
moviereviewnd.s3.amazonaws.com
有什么想法吗?我已经坚持了几个小时,似乎无法弄清楚。
在我的 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'],
:region => 'us-west-2',
:s3_endpoint => 's3-us-west-2.amazonaws.com'
}
}
但也试过这个:
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'],
:region => 'us-west-2',
:s3_endpoint => 'moviereviewnd.s3.amazonaws.com'
}
}
这两种方式都会产生与此 post 顶部提到的相同 URL 并导致 "must be addressed using the specified endpoint" 消息。
这是我的 Gemfile:
source 'https://rubygems.org'
gem 'rails', '4.2.0'
gem 'sass-rails', '5.0.1'
gem 'uglifier', '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks', '2.3.0'
gem 'jbuilder', '2.2.3'
gem 'sdoc', '0.4.0', group: :doc
gem 'devise', '~> 3.4.1'
gem 'paperclip', '~> 4.2.1'
gem 'aws-sdk', '< 2.0'
gem 'bootstrap-sass', '~> 3.3.3'
gem 'rmagick', '~> 2.13.4'
group :development, :test do
gem 'sqlite3', '1.3.9'
gem 'byebug', '3.4.0'
gem 'web-console', '2.0.0.beta3'
gem 'spring', '1.1.3'
end
group :production do
gem 'pg', '0.17.1'
gem 'rails_12factor', '0.0.2'
end
哇哦!使用 :s3_host_name 而不是 :s3_endpoint 有效!
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'],
:region => 'us-west-2',
:s3_host_name => 's3-us-west-2.amazonaws.com',
:url => ":s3_domain_url"
}