Подпись Not Найдено в тумане и волне несущей

Я использую carrierwave и fog-aws при загрузке файла в aws и сохранении URL-адреса aws в моей локальной таблице БД. Я создал carrierwave.rb файл для настройки всех учетных данных fog-aws.

begin
 CarrierWave.configure do |config|                      # required
 config.storage = :fog

 config.fog_credentials = {
  :provider               => 'AWS',       # required
  :aws_access_key_id      => 'Key_id',       # required
  :aws_secret_access_key  => 'access_key',       # required
  :region                 => 'us-west-2'  # o\tional, defaults to 'us-east-1'
  # :fog                   => 'host',
  # :endpoint               => 'host'
 }
 config.fog_directory  = 'my-images-server' # required
 # see https://github.com/jnicklas/carrierwave#using-amazon-s3
 # for more optional configuration
 config.fog_public     = true   # optional, defaults to true

Файл моего загрузчика содержит

class QueryUploader < CarrierWave::Uploader::Base
 storage :fog
 def store_dir
  base_dir = File.join(Rails.root, "public", "uploads")
  "#{base_dir}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
 end
 def cache_dir
  "/tmp/service-quep"
 end
 def extension_white_list
   %w(sql)
 end
end

Я прочитал много статей и ломал голову за 2 дня, так и не смог найти никакого решения. Мой ключ доступа без пробела и имя сегмента не заканчивается косой чертой. Может кто-нибудь сказать, почему это

Ожидаемое (200) <=> Фактическое (403 запрещено) excon.error.response:body => "\nSignatureDoesNotMatchРассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой ключ и метод подписи.YTUUYUDTDYJBKJNUFYD

ошибка идет.

1 ответ

Решение

Послушайте, в этом методе вам не нужно писать дополнительный код из-за автоматического сопоставления каталогов Rails, как если бы вы использовали "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" тогда это автоматически сопоставление /public/uploads/...

ваш код

def store_dir
    base_dir = File.join(Rails.root, "public", "uploads")
    "#{base_dir}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

это будет

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

Ты можешь проверить this gist это отлично подходит для работы с Rails, CarrierWave и AWS, также вы можете проверить это

Другие вопросы по тегам