Ruby Sinatra - Fügen Sie benutzerdefinierte Routen für Dateien in öffentlichen Ordnern hinzu

StackOverflow https://stackoverflow.com/questions/1787877

  •  21-09-2019
  •  | 
  •  

Frage

Ich habe eine Sinatra -App, die von verschiedenen Kunden verwendet wird. Ich möchte dem Firmenlogo des Kunden und einem benutzerdefinierten Layout für jeden Kunden zeigen.

Die Codebasis ist im Wesentlichen für alle gleich. Alles, was ich brauche, ist eine Möglichkeit, einen anderen Satz von Dateien im Verzeichnis "öffentlich" und "layout.erb" einfach zu verwalten. Kopieren Sie bei der Bereitstellung auf dem Remote -Server automatisch nur die Dateien des jeweiligen Clients.

War es hilfreich?

Lösung

Ein möglicher Weg wäre, eine zu haben view und public Verzeichnis pro Client und das richtige festlegen :views und :public Optionen für jede Anfrage

get '/:client/...' do
  set :views, File.dirname(__FILE__) + "/views/#{params[:client]}"
  set :public, File.dirname(__FILE__) + "/public/#{params[:client]}"

  # Your code
end

Basierend auf Kommentar bearbeiten:

Stellen Sie Ihren öffentlichen Ordner während der config Block. Fügen Sie nun einen Unterordner zu Ihrem öffentlichen Ordner für jeden Kunden hinzu. Alles, was Sie tun müssen, um auf die bestimmte Datei zuzugreifen, ist, Ihre Ansicht zu ändern, um zu erhalten /#{params[:client]}/logo.png Anstatt von /logo.png

Andere Tipps

Ich habe gerade einen Weg gefunden, dieses Problem zu lösen. Es ist möglich, Routen zu Dateien in öffentlichen Ordnern neu zu definieren. Tatsächlich prüft Sinatra zunächst, ob eine Anforderung "GET" über eine entsprechende Route verfügt, und wenn dies nicht der Fall ist, geht es zum "öffentlichen" Ordner für statische Inhalte. Für jede clientspezifische Datei, die ich benötige, verwende ich einen spezifischen Pfad wie '/client/logo.gif' eine Art von URL. Ich habe eine Route für solche Dateien erstellt und meine benutzerdefinierte Logik dort angewendet:

get '/client/logo.gif' do
  #custom logic..
  redirect "#{where_client_files_are}/logo.gif"
end

Sie können Ihren folgenden Code zu Ihrem hinzufügen Ruby/Sinatra Datei

Beispiel: Bilder erstellen. Stil- und Skriptverzeichnis unter Ihrem Projekt und unterhalb des Code

get '/project1/images/:file' do
  send_file('/home/sulo/dev/project1/images/'+params[:file], :disposition => 'inline')
end

get '/project1/style/:file' do
  send_file('/home/sulo/dev/project1/style/'+params[:file], :disposition => 'inline')
end

get '/project1/scripts/:file' do
  send_file('/home/sulo/dev/project1/scripts/'+params[:file], :disposition => 'inline')
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top