Рендеринг статических файлов в / doc в Rails - PullRequest
0 голосов
/ 03 февраля 2011

Пока у меня есть в config/routes.rb:

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 (такчто я могу сначала аутентифицировать пользователя в контроллере)?

1 Ответ

2 голосов
/ 03 февраля 2011

Я бы порекомендовал вообще не передавать файлы через 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...