Ruby on rails 如何添加我的应用程序';s的文档是否可以通过应用程序访问,但不能通过公共目录访问?(因此需要身份验证)

Ruby on rails 如何添加我的应用程序';s的文档是否可以通过应用程序访问,但不能通过公共目录访问?(因此需要身份验证),ruby-on-rails,Ruby On Rails,更新: 我得到了这个错误: (No route matches "/docs/index.html"... ) 访问时 admin.example.com/docs/index.html 该文件已存在 在my routes.rb文件中: map.with_options(:conditions => {:subdomain => 'admin']}) do |subdom| subdom.root :controller => 'admin/subscription

更新:

我得到了这个错误:

(No route matches "/docs/index.html"... )
访问时

admin.example.com/docs/index.html
该文件已存在

在my 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都是相对的,因此,我也不确定如何使用控制器)

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

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


实现这一点的一种方法是。

这是一本很好的入门书,介绍如何使用nginx和send_file实现对公众文件的保护。

您的方法应该是这样的:

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

怎样?我是否将它们流式传输给这些用户?@TheLindyHop可能使用
send\u file
(更新了带有链接的答案),尽管可能还有其他方法。但是。。假设我有href=“/myObject.html”,如何发送该文件?当我的路由告诉doc/使用get_file操作时,params散列会丢失该信息=\