Scala/Juego/Nginx:enrutamiento de recursos estáticos
-
20-12-2019 - |
Pregunta
Tengo mi aplicación Play ejecutándose:
http://localhost:9000
Nginx es un proxy que lo pasa a esta URL:
http://localhost/Demo/
Sin embargo, tengo un problema con los activos estáticos.Por ejemplo, este activo en la plantilla html
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
va a
http://localhost/assets/stylesheets/main.css
y obviamente resulta en que no lo encuentren.Si lo cambio a esto (agregar /Demo
delante de la URL):
<link rel="stylesheet" media="screen" href="/Demo@routes.Assets.at("stylesheets/main.css")">
Ahora irá correctamente a esta URL:
http://localhost/Demo/assets/stylesheets/main.css
Mi pregunta es:¿Cómo puedo agregar esto? /Demo
a todos mis activos estáticos sin codificarlos en mis plantillas?Prefiero resolver esto usando el enrutamiento de Play y limitar los cambios realizados en nginx conf.
Intenté agregar un prefijo de URL en application.conf
como esto
application.context="/Demo"
pero eso afectó a todas las URL, no solo a las estáticas, por lo que no es una solución.¿Alguna idea?
Mi pila:Play Framework 2.2.1 / Scala 2.10.3 / java 8 64bit / nginx 1.4.3 / ubuntu 13.10 64bit
ACTUALIZAR:SOLUCIÓN Gracias a @biesior por proporcionar la versión de Java, la convertí a Scala:
package core
import controllers.routes
object Assets {
def at(path: String): String = {
"/Demo" + routes.Assets.at(path)
}
}
Solución
Simplemente sobrescriba la ruta utilizando su propia implementación de activos (es decir,en utils
paquete):
package utils;
import controllers.routes;
public class MyAssets {
public static String at(String path){
return "/Demo"+ routes.Assets.at(path).toString();
}
}
en plantillas:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
Por otro lado, ¿el proyecto de destino también funcionará en el subdirectorio?Si no, es más fácil usar subdominios, también es posible con localhost, simplemente configure su nginx para que lo use ese proyecto, es decir: http://demo.loc
en lugar de extraño http://localhost/Demo
y agrega esto 'dominio' para usted hosts
archivo