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

更新を終了

そのため、YARD で生成されたドキュメントを置きたいサブドメイン admin.example.com があります。

それらをパブリックフォルダーに入れ、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

それらを public フォルダーに入れないでください。

それらを完全に別の場所に置き、認証されたユーザーのみにストリーミングして戻します。

これを行う 1 つの方法は、 を使用することsend_fileです。

于 2012-06-19T20:47:01.023 に答える
0

これは、nginx と send_file を使用してファイルを公開から保護する方法についての優れた入門書です

于 2012-06-19T21:06:06.263 に答える