Ошибка «Excon :: Error :: Forbidden» при попытке сохранить файлы в облачном хранилище Google с помощью Fog и Carrierwave - PullRequest
0 голосов
/ 02 мая 2018

Я использую 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, и, похоже, они не относятся к тому, что я делаю.

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

Ответы [ 4 ]

0 голосов
/ 26 июня 2018

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

Если вы хотите использовать google-cloud-storage в новом приложении Rails, вы можете сделать это с помощью Active Storage .

0 голосов
/ 12 мая 2018

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

0 голосов
/ 31 мая 2018

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

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

0 голосов
/ 07 мая 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...