Scala/Play/Nginx :routage des ressources statiques
-
20-12-2019 - |
Question
Mon application Play est en cours d'exécution :
http://localhost:9000
Nginx est un proxy qui le transmet à cette URL :
http://localhost/Demo/
J'ai cependant un problème avec les actifs statiques.Par exemple, cet actif dans un modèle HTML
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
va
http://localhost/assets/stylesheets/main.css
et cela aboutit évidemment à ne pas être trouvé.Si je le change en ceci (ajouter /Demo
devant l'url) :
<link rel="stylesheet" media="screen" href="/Demo@routes.Assets.at("stylesheets/main.css")">
il ira désormais correctement à cette URL :
http://localhost/Demo/assets/stylesheets/main.css
Ma question est:comment puis-je ajouter ceci /Demo
à tous mes actifs statiques sans les coder en dur dans mes modèles ?Je préfère résoudre ce problème en utilisant le routage de Play et limiter les modifications apportées à la configuration nginx.
J'ai essayé d'ajouter un préfixe d'URL dans application.conf
comme ça
application.context="/Demo"
mais cela a affecté toutes les URL, pas seulement les URL statiques, donc pas une solution.Des pensées?
Ma pile :Play Framework 2.2.1 / scala 2.10.3 / java 8 64bit / nginx 1.4.3 / ubuntu 13.10 64bit
MISE À JOUR:SOLUTION Merci à @biesior d'avoir fourni la version Java, je l'ai convertie en scala :
package core
import controllers.routes
object Assets {
def at(path: String): String = {
"/Demo" + routes.Assets.at(path)
}
}
La solution
Remplacez simplement le chemin en utilisant votre propre implémentation d'actifs (c.-à-d.dans utils
emballer):
package utils;
import controllers.routes;
public class MyAssets {
public static String at(String path){
return "/Demo"+ routes.Assets.at(path).toString();
}
}
dans les modèles :
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
D'un autre côté, le projet cible fonctionnera-t-il également dans le sous-répertoire ?Sinon, il est simplement plus facile d'utiliser des sous-domaines, c'est également possible avec localhost, configurez simplement votre nginx pour que ce projet l'utilise, c'est-à-dire : http://demo.loc
à la place, oh http://localhost/Demo
et ajoute ceci 'domaine' à ton hosts
déposer