Когда я пытаюсь загрузить изображение в объект «Автомобиль», мне отказывают в доступе к S3. Но изображения сайта, которые находятся в . папка активов отображаются нормально, так как я добавил S3 Специфическая ошибка, что я получаю это:.Excon :: Errors :: Forbidden (Ожидаемый (200) <=> Фактический (403 Запретный)
2015-02-17T14:40:48.459629+00:00 app[web.1]: Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden)
2015-02-17T14:40:48.459630+00:00 app[web.1]: excon.error.response
2015-02-17T14:40:48.459635+00:00 app[web.1]: "Connection" => "close"
2015-02-17T14:40:48.459637+00:00 app[web.1]: "Content-Type" => "application/xml"
2015-02-17T14:40:48.459639+00:00 app[web.1]: "Date" => "Tue, 17 Feb 2015 14:40:48 GMT"
2015-02-17T14:40:48.459640+00:00 app[web.1]: "Server" => "AmazonS3"
2015-02-17T14:40:48.459632+00:00 app[web.1]: :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>2CE306ACD51F02A1</RequestId><HostId>tKLXUAKxyDFTMExl7kE+AuVVsEJOFqXh983li6N7R2UlYDXv1Z3GJRvW5zy1XIXVs2zArp310vg=</HostId></Error>"
2015-02-17T14:40:48.459642+00:00 app[web.1]: "x-amz-id-2" => ""part of secret key"="
С «частью секретного ключа», очевидно отредактированным я попытался создать другой пользователь и использовать новые ключи, но это не сработало.
app/uploaders/picture_uploader
class PictureUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
process resize_to_limit: [400, 400]
if Rails.env.production?
storage :fog
else
storage :file
end
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
# Add a white list of extensions which are allowed to be uploaded.
def extension_white_list
%w(jpg jpeg gif png)
end
end
carrier_wave.rb
if Rails.env.production?
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY']
}
config.fog_directory = ENV['S3_BUCKET']
end
end
Я считаю, что это все соответствующие файлы, дайте мне знать, если есть больше, чтобы видеть. Не уверен, что если указать регион или мощный пользователь, это не похоже.
Удивительно, спасибо за это прохождение! Документам AWS об их обновленной системе было больно ориентироваться. – Jadam
Хотелось бы, чтобы я мог дать вам больше, чем одно преимущество. Я буквально провел 4 часа, пытаясь добиться этого. Трудно поверить, что S3 настолько запутан, сложна в настройке и плохо документирована. – IAmNaN
Итак, если мы будем следовать этому и создать пользователя на амазонке ... теперь у нас есть 2 набора ключей доступа/секретности (один общий для вашей учетной записи AWS, когда вы переходите к своим «учетным данным безопасности» -> Ключам доступа (идентификатор ключа доступа и секретный ключ доступа) ... затем еще один для любого пользователя, которого вы настраиваете в «Пользователи», как это используется в вышеприведенных шагах. Какой набор ключей мы используем в терминале при запуске «heroku config»: установите AWS_ACCESS_KEY_ID = и конфигурацию heroku : set AWS_SECRET_ACCESS_ID = '??? – BB500