2016-06-26 8 views
0

Я создаю приложение рельсов с несущей волной и туманом для хранения вложений. В моей тестовой среде я использую локальное хранилище тумана.Carrierwave туман локальное хранилище полный путь присоединения

Я ищу способ получить полный путь вложения с этой конфигурацией.

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    provider:    'Local', 
    local_root:    '/Users/me/fog', 
    endpoint:    '/Users/me/fog', 
    } 

    config.fog_directory = 'test.myapp.com 
    config.fog_public  = false 
    config.fog_attributes = { 'Cache-Control' => 'max-age=315576000' } 
end 

Когда я использовать любые другие варианты хранения (например, AWS S3), я могу получить полный URL для вложения просто делать my_object.my_attachment_url или my_object.my_attachment.path.

Однако при использовании хранилища Local я получаю только относительный путь к моим параметрам конфигурации, например my_object/my_attachment/1/test.jpg.

Есть ли какой-либо путь через несущую или туман, чтобы получить полный путь к этому локальному файлу?

Для моего примера, выход Ищу бы: /Users/me/fog/test.myapp.com/my_object/my_attachment/1/test.jpg

ответ

0

Для меня ответ был модифицирования в carrierwave класса Uploader.

Я имел

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

, который работал отлично для AWS S3, как и все зависимая информация S3 была вставлена ​​перед этой строкой. Однако, чтобы заставить это работать с туманом Local, я добавил:

if Rails.env.test? 
    def base_path 
    "#{File.expand_path(CONFIG.fog_local_root)}/#{CONFIG.fog_directory}/" 
    end 
else 
    def base_path 
    '' 
    end 
end