我收到以下错误:
The AWS Access Key Id you provided does not exist in our records.
我不确定为什么我会收到此错误,因为我在我的aws安全凭据页面中显示了正确的访问密钥和密钥(我已复制并粘贴多次以反驳可能性错字)。如果我能够登录并访问我的STILL空桶,为什么它会告诉我我的访问密钥不在他们的记录中?
这是我的s3.yml:
GMAIL_USERNAME: <my email>
GMAIL_PASSWORD: <my password>
MONGOHQ_URL: <my mongoid url>
S3_BUCKET_NAME_DEVELOPMENT: <my development bucket>
S3_BUCKET_NAME_PRODUCTION: <my production bucket>
S3_BUCKET_NAME_TEST: <my test bucket>
AWS_ACCESS_KEY_ID: <my access key>
AWS_SECRET_ACCESS_KEY: <my secret key>
这是我的照片.rb:
class Picture
include Mongoid::Document
include Mongoid::Paperclip
embedded_in :datum, inverse_of: :pictures
has_mongoid_attached_file :attachment,
path: ':attachment/:id/:style.:extension',
storage: :s3,
url: ':s3_domain_url',
bucket: Proc.new{ |a| a.instance.s3_bucket },
s3_credentials: File.join(Rails.root, 'config', 's3.yml'),
styles: {
original: ['1920x1680', :jpg],
small: ['100x100', :jpg],
medium: ['250x250', :jpg],
large: ['500x500', :jpg]
},
convert_options: { all: '-background white -flatten +matte' }
def s3_bucket
if Rails.env.development?
ENV['S3_BUCKET_NAME_DEVELOPMENT']
else
ENV['S3_BUCKET_NAME_PRODUCTION']
end
end
end
这是我的datum.rb:
class Datum
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Paperclip
field :title, type: String
field :user_id, type: Integer
validates :title, presence: true
validates :user_id, presence: true
embeds_many :todo_items
embeds_many :pictures, cascade_callbacks: true
accepts_nested_attributes_for :pictures
end
以下是我的datum_params
方法:
# Never trust parameters from the scary internet, only allow the white list through.
def datum_params
params.require(:datum).permit(:title, :user_id, :identifying_image, pictures_attributes: [:picture])
end
以下是我的picture_params
方法:
def picture_params
params.require(:picture).permit(:datum_id, :attachment)
end
以下是我用于上传的表单:
<%= bootstrap_form_for(picture, url: { action: :create }, html: { multipart: true }, remote: true ) do |f| %>
<%= f.file_field :picture, multiple: true, name: 'picture[picture]' %>
<%= f.submit 'Upload' %>
<% end %>
最初,我有一个strong_parameters问题,rails4guides.com(下面给出答案的用户)能够帮助我克服。当我停止获取未经许可的参数错误并开始从AWS获取错误时,我知道我取得了进展。任何人都可以看到我的凭据无法正常工作的原因吗?我应该在请求参数中看到有关我的访问密钥的任何内容吗?因为我现在不在。
答案 0 :(得分:1)
好的,我将在另一个答案中进一步解释,以便进一步阐述。
在典型情况下,您的表单会有类似的内容:
<%= f.file_field :picture %>
图片是您要上传的文件的名称。现在想象一下这个表单会将结果传递给ImagesController。为了使ImagesController能够处理图片,它应该通过强参数列入白名单,如:
def image_params
params.require(:image).require(:picture)
end
另一种情况是使用嵌套属性。如果您想为文章设置图片,您的表单将如下所示:
<% f.fields_for :image do |image_form| %>
<%= image_form.file_field :picture %>
<% end %>
你的article_params看起来像这样:
def article_params
params.require(:article).permit(:title, :content, images_attributes: [:picture])
end
小记:它应该是images_attributes(都是复数)而不是image_attributes。另一方面,实际的嵌套属性应该是单数。
这几乎是强参数使用的基本概要,我希望它能帮到你。附:可能会有一些错别字,因为我在手机上打字。