Я не думаю, что вы можете сделать это с carrierwave по умолчанию, но вы можете обойти это с помощью этого обезьяньего патча
module CarrierWave::Uploader::Url
def url
if $request
if file.respond_to?(:url) and not file.url.blank?
$request.protocol + $request.host_with_port + file.url
elsif current_path
$request.protocol + $request.host_with_port + (base_path || "") + File.expand_path(current_path).gsub(File.expand_path(root), '')
end
else
raise ArgumentError, "Request object is empty"
end
end
end
, так как вы не можете получить доступ к информации rails session/request
из загрузчика (любой модели)Вам нужно определить before_filter
в application_controller
для загрузки данных запроса
before_filter :load_request
def load_request
$request = request
end
Я тестировал этот патч только в локальном хранилище / монгоиде.Я не знаю, как это будет работать в Amazon S3 / туман ..
Надеюсь, это поможет