Ruby Sinatra - Ajouter des itinéraires personnalisés pour les fichiers dans les dossiers publics

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

  •  21-09-2019
  •  | 
  •  

Question

J'ai une application Sinatra qui serait utilisée par différents clients.Je souhaite afficher le logo de l'entreprise du client et un layout.erb personnalisé pour chaque client.

La base de code est essentiellement la même pour tout le monde.Tout ce dont j'ai besoin est un moyen de conserver facilement un ensemble différent de fichiers dans le répertoire « Public » et « layout.erb », et lors du déploiement sur le serveur distant, de copier automatiquement uniquement les fichiers du client particulier.

Était-ce utile?

La solution

Une façon possible serait d'avoir un répertoire view et public par client et définissez les options appropriées de :views et :public pour chaque demande

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

  # Your code
end

Modifier en fonction de commentaire:

Définissez votre dossier public pendant le bloc de config. Maintenant, ajoutez un sous-dossier à votre dossier public pour chaque client. Tout ce que vous devez faire pour accéder au fichier spécifique est de modifier votre point de vue pour obtenir /#{params[:client]}/logo.png au lieu de /logo.png

Autres conseils

Il suffit de trouver un moyen de résoudre ce problème. Il est possible de redéfinir les routes vers des fichiers dans des dossiers publics. En fait, vérifie d'abord si une demande Sinatra « get » a une route correspondante, et si elle ne le fait pas, il va dans le dossier « public » pour le contenu statique. Donc, pour un fichier spécifique au client j'ai besoin, j'utiliser un chemin specifc comme genre d'URL « /client/logo.gif ». J'ai créé un itinéraire pour ces fichiers et appliqué ma logique personnalisée là:

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

Vous pouvez ajouter le code ci-dessous à votre rubis/sinatra déposer

exemple :créer des images.répertoire de style et de scripts sous votre projet et sous le 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top