Как обслуживать статический контент из контроллера в Rails?

Я хотел бы обслуживать статический контент из действия контроллера в Rails так же, как Rails обслуживает статический контент из общедоступного каталога. Я не хочу просто изменить путь к общедоступному каталогу или добавить другой путь к Rails для обслуживания файлов оттуда. Я хочу явно обрабатывать запросы к определенным файлам в контроллере, чтобы проверить запрос в зависимости от запрошенных файлов.

Я наивно пытался использовать send_file, но тогда я больше не могу использовать запросы диапазона.

class MyController < ApplicationController
  def dummyAction
    filePath = 'foo/bar/baz.mp3'
    send_file(filePath, {:filename => "baz.mp3", :type => "audio/mpeg"})
  end
end

Я бы предпочел использовать Rails, а не писать весь код самостоятельно. Есть ли что-то в Rails для этого? Может драгоценный камень?


person Jan Deinhard    schedule 11.12.2013    source источник
comment
Помогает ли этот ответ о «принятии запросов диапазона байтов через send_file»? =› stackoverflow.com/a/7604330/2463468   -  person benjaminjosephw    schedule 11.12.2013
comment
Я надеялся на более элегантное решение. У Rails, кажется, есть средства для обслуживания статического контента. Запросы диапазона работают при обслуживании файлов MP3 из общедоступного каталога.   -  person Jan Deinhard    schedule 11.12.2013


Ответы (1)


Лучше хранить ваши файлы в каталоге ресурсов или создать статический контроллер ресурсов или использовать общую папку. См.: http://railscasts.com/episodes/117-semi-static-pages и если у вас есть доступ к http://railscasts.com/episodes/117-semi-static-pages-revised это также может быть интересно: https://github.com/thoughtbot/high_voltage

Но если вы должны пойти этим (неправильным) путем: добавьте путь к вашему config\routes.rb

resources :MyController do
 collection do
   get 'dummyAction'
 end
end

Добавьте тип mime в config/initializers/mime_types.rb:

Mime::Type.register_alias "audio/mp3", :mp3

Изменить контроллер на:

def dummyAction
 respond_to do |format|
   format.mp3
 end
end

Сохраните файл как MyController/dummyAction.mp3.erb.

person TrevTheDev    schedule 11.12.2013