Я загружаю свой файл в личное хранилище 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