0

更新:

我收到此错误:

(No route matches "/docs/index.html"... )

访问时

admin.example.com/docs/index.html

文件存在。

在我的 routes.rb 文件中:

map.with_options(:conditions => {:subdomain => 'admin']}) do |subdom|
    subdom.root :controller => 'admin/subscriptions', :action => 'index'
    subdom.with_options(:namespace => 'admin/', :name_prefix => 'admin_', :path_prefix => nil) do |admin|
        admin.connect "/docs/:id", :controller => :docs, :action => :get_file
    end
end

并且文档控制器位于 app/controllers/admin/

该控制器中的唯一方法

def get_file
        path = request.request_uri
        send_file(path)
    end

结束更新

所以,我有一个子域 admin.example.com,我想把 YARD 生成的文档放在后面。

我尝试将它们放在公用文件夹中,并修改 routes.rb 文件,但始终可以访问文档。

如何使它们仅在登录到 admin.example.com 后才可用?

(文档中的所有 href 都是相对的,所以,我也不确定如何使用控制器)

4

3 回答 3

1

这是您的方法应如下所示:

def get_file
    path = Dir[Rails.root.join("docs", params[:file_or_folder])]
    if path.length > 0
        # check if root directory
        path_str = path[0]
        if path_str =~ /\/docs\/?\z/
            path_str += "/index.html"
        end
        render :file => path_str
    else
        render :text => "File Not Found"
    end

end

您的 rails 路线应如下所示:

map.connect "/docs/:file_or_folder", :controller => :docs, :action => :get_file, :file_or_folder => /.*/
map.resources :docs, :only => :get_file
于 2012-06-20T15:03:30.097 回答
0

不要将它们放在公用文件夹中。

将它们完全放在其他地方并仅将它们流回经过身份验证的用户。

一种方法是使用send_file.

于 2012-06-19T20:47:01.023 回答
0

这是关于如何使用 nginx 和 send_file 完成对公众文件的保护的很好的入门指南。

于 2012-06-19T21:06:06.263 回答