Я использую Carrierwave и Fog для хранения изображений в облаке. Ранее я использовал Amazon S3 для реального хранилища, которое работало без проблем. Но я переключился на Google Cloud Storage, и теперь при попытке сохранить что-либо появляется следующая ошибка:
Excon :: Ошибка :: Запрещено в GalleriesController # create
Ожидаемое (200) <=> Фактическое (403 запрещено) excon.error.response: body => "InvalidSecurity
предоставленные учетные данные безопасности не действительны. Запрос
не был подписан или содержал искаженную подпись
: cookies => []: headers => {"Alt-Svc" => "hq = \": 443 \ "; ma = 2592000;
Quic = 51303433; Quic = 51303432; Quic = 51303431; Quic = 51303339;
Quic = 51303335, Quic = \ ": 443 \"; ма = 2592000; v = \ "43,42,39,38,35 \"»
"Content-Length" => "224" "Content-Type" => "application / xml;
charset = UTF-8 "" Date "=>" Вт, 01 мая 2018 22:03:23 GMT "" Сервер "=>
"UploadServer" "Vary" => "Origin" "X-GUploader-UploadID" =>
"Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}: host => "[directory] .storage.googleapis.com": local_address
=> "xxx.xxx.x.xxx": local_port => xxxxx: path => "/uploads%2Fimage.png": port => 443: reason_phrase => «Запрещено»
: remote_ip => "xxx.xxx.x.xx": status => 403: status_line => "HTTP / 1.1
403 Запрещено \ r \ n "
Инициализаторы / carrierwave.rb
CarrierWave.configure do |config|
config.fog_provider = 'fog/google'
config.fog_credentials = {
provider: 'Google',
google_storage_access_key_id: 'GOOGxxxxxxxxxxx',
google_storage_secret_access_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
config.fog_directory = 'xxxxxxxxxxx'
#config.fog_public = false
#config.fog_attributes = { cache_control: "public, max-age=#{365.day.to_i}" }
end
Uploader
class PhotoFileUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :fog
def fix_exif_rotation
manipulate! do |img|
img.tap(&:auto_orient)
end
end
process :fix_exif_rotation
process :resize_to_fit => [800, 56000]
version :thumb do
process resize_to_fit: [300, 56000]
end
end
Gemfile
gem "fog-google"
gem "google-api-client", "> 0.8.5", "< 0.9"
gem "mime-types"
Кажется, что есть проблема с key_id или secret_key, но я только что скопировал и вставил оба из раздела «Взаимодействие» на странице настроек Google Cloud Storage. И я понятия не имею, как проверить, действительны ли они. Мой запрос от localhost, если это имеет значение.
Я обнаружил несколько подобных ошибок в SO, но все они связаны с Amazon, и, похоже, они не относятся к тому, что я делаю.
У кого-нибудь есть идеи, как мне это отладить?