Wie füge ich die Dokumente meiner App hinzu, auf die über die App zugegriffen werden soll, aber nicht über das öffentliche Verzeichnis? (also Authentifizierung ist erforderlich) - Ruby-on-Rails

AKTUALISIEREN:

Ich bekomme diesen Fehler:

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

beim Zugriff

admin.example.com/docs/index.html

Die Datei existiert.

In meiner routes.rb-Datei:

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

und der Docs-Controller befindet sich in der App / controllers / admin /

die einzige Methode in diesem Controller

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

END UPDATE

Also, ich habe eine Subdomain, admin.example.com, die ich YARD generierte Dokumente hinterlegen möchte.

Ich habe versucht, sie einfach in den Öffentlichen Ordner zu bringen und die Datei routes.rb zu modifizieren, aber die Dokumente waren immer zugänglich.

Wie stelle ich es so dar, dass sie nur verfügbar sind, wenn sie bei admin.example.com angemeldet sind?

(alle hrefs in den Dokumenten sind relativ, also bin ich mir nicht sicher, wie ich Controller auch verwenden würde)

Antworten:

1 für die Antwort № 1

So sollte Ihre Methode aussehen:

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

Und deine Schienenstrecke sollte so aussehen:

map.connect "/docs/:file_or_folder", :controller => :docs, :action => :get_file, :file_or_folder => /.*/
map.resources :docs, :only => :get_file

0 für die Antwort № 2

Legen Sie sie nicht in den öffentlichen Ordner.

Stellen Sie sie woanders hin und streamen Sie sie nur an authentifizierte Benutzer zurück.

Eine Möglichkeit, dies zu tun, ist zu benutzen send_file.


0 für die Antwort № 3

Hier "s ein guter Grund, wie Sie Dateien mit nginx und send_file vor der Öffentlichkeit schützen können.


Verwandte Fragen
Speisekarte