AWS::S3::Errors::NoSuchKey 没有这样的密钥
AWS::S3::Errors::NoSuchKey No Such Key
我在 Heroku 上有一个带有 Paperclip 运行 的 Rails 4 应用程序。我最近开始遇到一个问题,该问题阻止我更新带有附加图像的任何模型。例如,任何时候我通过网站的 CMS 系统对我的 Company
模型进行更改时,更改都不会保存。我试过只更改图像、图像和各种其他属性,并且只更改非图像属性。就好像 @company.save
在我的控制器的更新操作中从未被调用过。
我找到 this issue report 并尝试了建议的各种解决方案,但没有任何效果。
这是我的 Company
模型:
class Company < ActiveRecord::Base
has_attached_file :logo, :styles => { :medium => "300x300>", :thumb => "100x100>" }
validates_attachment_content_type :logo, :content_type => /\Aimage\/.*\Z/
end
在我的日志中,出现以下错误:
[AWS S3 404 0.022711 0 retries] head_object(:bucket_name=>"myApp",:key=>"companies/profile_photos/000/000/118/original/2015-09-05_19.05.34.jpg") AWS::S3::Errors::NoSuchKey No Such Key
我确认我的 S3 凭据是使用 heroku config
设置的并且它们是有效的。
我不确定,但我怀疑这可能与我最近添加以下构建包有关:
=== myApp Buildpack URLs
1. https://github.com/bobbus/image-optim-buildpack.git
2. https://github.com/heroku/heroku-buildpack-ruby.git
我无法在本地主机上重现该问题。
更新
我已经就这个问题展开了 issue report。
这是我在 production.rd
中的 config.paperclip_defaults
块
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => :https,
:s3_host_name => 's3.amazonaws.com',
:s3_credentials => {
:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
这是我的 aws.yml
:
development:
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
production:
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
No Such Key
是 S3 表示“404 Not Found”的方式。
我不认为它有任何其他含义。
请求已获得授权且语法有效,但指定路径的存储桶中没有文件。
您可能想要从 AWS 控制台检查存储桶的内容。
来自 GitHub 回形针维基的文档
假设您正在使用 dotenv-rails...
在 development.rb 和 production.rb 文件中:
config.paperclip_defaults = {
storage: :s3,
s3_host_name: ENV['S3_HOST_NAME'],
bucket: ENV['S3_BUCKET_NAME']
}
确保在您的 Heroku 环境中设置这些变量:
$ heroku config:set S3_HOST_NAME=your-s3-hostname-here S3_BUCKET_NAME=your-production-bucket-name-here
文档来自 rubydoc.info
这说明您应该有一个指定了这些详细信息的 yaml 文件,或者在您的模型上编写一个方法。
我在 Heroku 上有一个带有 Paperclip 运行 的 Rails 4 应用程序。我最近开始遇到一个问题,该问题阻止我更新带有附加图像的任何模型。例如,任何时候我通过网站的 CMS 系统对我的 Company
模型进行更改时,更改都不会保存。我试过只更改图像、图像和各种其他属性,并且只更改非图像属性。就好像 @company.save
在我的控制器的更新操作中从未被调用过。
我找到 this issue report 并尝试了建议的各种解决方案,但没有任何效果。
这是我的 Company
模型:
class Company < ActiveRecord::Base
has_attached_file :logo, :styles => { :medium => "300x300>", :thumb => "100x100>" }
validates_attachment_content_type :logo, :content_type => /\Aimage\/.*\Z/
end
在我的日志中,出现以下错误:
[AWS S3 404 0.022711 0 retries] head_object(:bucket_name=>"myApp",:key=>"companies/profile_photos/000/000/118/original/2015-09-05_19.05.34.jpg") AWS::S3::Errors::NoSuchKey No Such Key
我确认我的 S3 凭据是使用 heroku config
设置的并且它们是有效的。
我不确定,但我怀疑这可能与我最近添加以下构建包有关:
=== myApp Buildpack URLs
1. https://github.com/bobbus/image-optim-buildpack.git
2. https://github.com/heroku/heroku-buildpack-ruby.git
我无法在本地主机上重现该问题。
更新
我已经就这个问题展开了 issue report。
这是我在 production.rd
config.paperclip_defaults
块
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => :https,
:s3_host_name => 's3.amazonaws.com',
:s3_credentials => {
:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
这是我的 aws.yml
:
development:
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
production:
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
No Such Key
是 S3 表示“404 Not Found”的方式。
我不认为它有任何其他含义。
请求已获得授权且语法有效,但指定路径的存储桶中没有文件。
您可能想要从 AWS 控制台检查存储桶的内容。
来自 GitHub 回形针维基的文档
假设您正在使用 dotenv-rails...
在 development.rb 和 production.rb 文件中:
config.paperclip_defaults = {
storage: :s3,
s3_host_name: ENV['S3_HOST_NAME'],
bucket: ENV['S3_BUCKET_NAME']
}
确保在您的 Heroku 环境中设置这些变量:
$ heroku config:set S3_HOST_NAME=your-s3-hostname-here S3_BUCKET_NAME=your-production-bucket-name-here
文档来自 rubydoc.info
这说明您应该有一个指定了这些详细信息的 yaml 文件,或者在您的模型上编写一个方法。