Carrierwave + Mongoid полный URL в ответе json - PullRequest
1 голос
/ 16 января 2012

Я пытаюсь создать API для мобильного приложения и использую Carrierwave и Mongoid. Все отлично работает с загрузкой и извлечением изображений, но когда я генерирую ответ json, URL-адреса изображения просто показывают путь / to / image.png вместо http://localhost:3000/path/to/image.png.

Как мне заставить мое приложение генерировать полный URL к изображению. Я провел обширный поиск в Google, но не могу найти надежных решений.

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 17 января 2012

Я не думаю, что вы можете сделать это с 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 / туман ..

Надеюсь, это поможет

...