到目前为止,我已进入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
中添加一个链接(以便我可以先在控制器中验证用户)?
答案 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