Excon :: Error :: Запрещенная ошибка при попытке сохранить файлы в Google Cloud Storage с помощью Fog и Carrierwave

Я использую Carrierwave и Fog для хранения изображений в облаке. Раньше я использовал Amazon S3 в качестве фактического хранилища, которое работало без проблем. Но я переключился на Google Cloud Storage, и теперь каждый раз, когда я пытаюсь что-либо сохранить, я получаю следующую ошибку:

Excon :: Error :: Запрещено в 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 \ " ; ma = 2592000; v = \ "43,42,39,38,35 \" "" Content-Length "=>" 224 "" Content-Type "=>" application / xml; charset = UTF-8 "" Date "=>" Вт, 01 мая 2018 г. 22:03:23 GMT "" Server "=>" UploadServer "" Vary "=>" Origin "" X-GUploader-UploadID "=>" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "}: host => "[каталог] .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

Загрузчик

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, но я просто скопировал и вставил оба из раздела Interoperability на странице настроек Google Cloud Storage. И я понятия не имею, как проверить, действительны ли они. Мой запрос от localhost, если это важно.

Я нашел несколько похожих ошибок на SO, но все они связаны с Amazon и, похоже, не относятся к тому, что я делаю.

У кого-нибудь есть идеи, как я могу это отладить?


person Yuri Gert    schedule 02.05.2018    source источник


Ответы (4)


Вы должны использовать допустимое имя каталога в for_directory.

Замените config.fog_directory = '[directory]' на config.fog_directory = 'name_of_fog_folder'.

Надеюсь, это поможет.

person Ankit Pandey    schedule 07.05.2018
comment
Спасибо, к сожалению, я просто использовал [каталог] как замену фактическому имени сегмента, так как оно конфиденциально. Я изменил его на x, чтобы было понятнее. - person Yuri Gert; 08.05.2018

Глядя на вашу ошибку, кажется, что хост является причиной того, что ваш звонок запрещен. AFAIK, хост должен быть записан как такой в вашей конфигурации. Я считаю, что сообщение об ошибке недостаточно однозначно.

Надеюсь это поможет.

person Jean    schedule 30.05.2018

Вам нужно использовать существующее имя вместо того, чтобы вставлять случайное имя. Попробуйте переустановить некоторые файлы, необходимые для запуска программы, поскольку я когда-то делал то же самое, но файл был обновлен, поэтому он не работал.

person PotatoLatte    schedule 12.05.2018
comment
Я не уверен, что вы имеете в виду под именем, но все мои учетные данные верны, я проверил в четыре раза. Я попытался переустановить все необходимые драгоценные камни, но результат тот же. - person Yuri Gert; 12.05.2018

Вы можете попробовать использовать google-cloud-storage Библиотека Ruby для отладки вашей аутентификации. Просто напишите простой скрипт, который загружает и скачивает файл. Примеры есть в это руководство.

Если вы хотите использовать облачное хранилище Google в новом приложении Rails, вы можете сделать это с помощью Active Storage.

person quartzmo    schedule 25.06.2018