Как получить URL доступа к объекту в приватной корзине S3 с использованием carrierwave - PullRequest
0 голосов
/ 09 января 2019

Я загружаю свой файл в личное хранилище s3 с использованием carrierwave, политика которого «Bucket и Object не являются общедоступными».

Теперь, когда я пытаюсь сгенерировать URL доступа с @docuemnt.pdf_file.url для моего объекта в этом приватном контейнере, я получаю сообщение об ошибке "bucket_name is required" даже после передачи имени сегмента как @docuemnt.pdf_file.url 'privatebucketname', я получаю сообщение об ошибке " ArgumentError: Version privatebucketname doesn't exist! ".

Как мне получить URL для доступа к приватному объекту корзины из моего приложения rails с использованием перевозчика-волны?

Мой код загрузки выглядит следующим образом:

class SecureUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick


  storage :fog

  def fog_directory
    ENV['AWS_SECURED_BUCKET']
  end

  def fog_public
    false
  end

  def fog_authenticated_url_expiration
    1.minutes # in seconds from now,  (default is 10.minutes)
  end
end

Моя конфигурация carrierwave выглядит следующим образом:

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:               'AWS',
    aws_access_key_id:      ENV['AWS_KEY'],
    aws_secret_access_key:  ENV['AWS_SECRET'],
    region:                 ENV['AWS_REGION']
  }

  # For testing, upload files to local `tmp` folder.
  if Rails.env.test? || Rails.env.cucumber?
    config.storage           = :file
    config.enable_processing = false
    config.root              = "#{Rails.root}/tmp"
  else
    config.storage = :fog
  end

  config.cache_dir        = "#{Rails.root}/tmp/uploads" # To let CarrierWave work on Heroku
  config.fog_directory    = ENV['AWS_BUCKET']
end

1 Ответ

0 голосов
/ 10 января 2019

У меня обычно есть инициализатор carrierwave.rb и я сохраняю там конфигурацию.

CarrierWave.configure do |config|
  if Rails.env.production?
    config.fog_provider = 'fog/aws'
    config.enable_processing = true
    config.fog_directory = Rails.application.credentials.aws[:bucket]
    config.fog_public = false # optional, defaults to true
    config.fog_attributes = { "Cache-Control" => "max-age=315576000" }

    config.fog_credentials = {
      provider: "AWS",
      aws_access_key_id: Rails.application.credentials.aws[:access_key_id]
      aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key]
      region: Rails.application.credentials.aws[:region]
    }
    config.storage = :fog
  else
    config.enable_processing = false
    config.storage = :file
  end
end
...