2011-02-03 1 views
0

До сих пор я в config/routes.rb:Рендер статические файлы в/док в Rails

match 'doc/:path' => 'doc#show' 

И в app/controllers/doc_controller.rb:

class DocController < ApplicationController 
    layout false 

    def show 
    render File.join(RAILS_ROOT, 'doc', params[:path]) 
    end 
end 

Это работает найти для index.html и других .html файлов. Но он не подает .css и .js. Он также не служат вложенные файлы и каталоги, такие как /doc/metrics/output/index.html

Как я могу получить Rails, чтобы обслуживать все статические файлы в /doc, но не просто положить ссылку на них в /public (так что я могу autheticate пользователю в контроллер сначала)?

ответ

2

Я бы рекомендовал не обслуживать файлы через Rails. Служите им через свой сервер (Nginx, Apache). Вы можете использовать заголовки X-Accel-Redirect и X-Sendfile, чтобы сообщить Nginx и Apache вместо этого отправить статический файл. Преимущество этого подхода заключается в том, что вы все еще можете аутентифицировать пользователя, прежде чем разрешать им доступ к файлу. Вот Nginx учебник:

http://ablogaboutcode.com/2010/11/19/serving-static-files-passenger-nginx/

Другой вариант заключается в установке ваши маршруты, как это:

 
match 'doc' => 'doc#show' 

И пройти свой путь в качестве параметра, так что вы не должны делать вложенную согласования URL в ваши маршруты или обрабатывать специальные случаи (.css, .js, .html, ...)

 
/doc?path=/path/to/my/document.css 
+0

Будет ли это работать с Heroku? –

+0

Я считаю, что X-Sendfile будет работать в той или иной форме на Heroku. Я бы рекомендовал проверить их документацию и помощь. –

+0

Похоже, они этого не делают. –

Смежные вопросы