Ruby Sinatra - Ajouter des itinéraires personnalisés pour les fichiers dans les dossiers publics
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.
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