在Rails中的/ doc中渲染静态文件

时间:2011-02-03 17:03:44

标签: ruby-on-rails ruby-on-rails-3

到目前为止,我已进入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 个答案:

答案 0 :(得分: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