Scala/Play/Nginx:statisches Ressourcenrouting
-
20-12-2019 - |
Frage
Ich habe meine Play-App ausgeführt:
http://localhost:9000
Nginx leitet es als Proxy an diese URL weiter:
http://localhost/Demo/
Ich habe allerdings ein Problem mit statischen Assets.Zum Beispiel dieses Asset in einer HTML-Vorlage
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
wird
http://localhost/assets/stylesheets/main.css
und führt offensichtlich dazu, dass sie nicht gefunden wird.Wenn ich es so ändere (hinzufügen /Demo
vor der URL):
<link rel="stylesheet" media="screen" href="/Demo@routes.Assets.at("stylesheets/main.css")">
Es wird jetzt korrekt zu dieser URL weitergeleitet:
http://localhost/Demo/assets/stylesheets/main.css
Meine Frage ist:Wie kann ich das hinzufügen? /Demo
auf alle meine statischen Assets, ohne sie hart in meine Vorlagen einzubinden?Ich bevorzuge es, dieses Problem mithilfe des Play-Routings zu lösen und die an der Nginx-Konferenz vorgenommenen Änderungen zu begrenzen.
Ich habe versucht, ein URL-Präfix hinzuzufügen application.conf
so was
application.context="/Demo"
Aber das betraf alle URLs, nicht nur die statischen, also keine Lösung.Irgendwelche Gedanken?
Mein Stapel:Spielenrahmen 2.2.1 / scala 2.10.3 / java 8 64bit / nginx 1.4.3 / ubuntu 13.10 64bit
AKTUALISIEREN:LÖSUNG Vielen Dank an @biesior für die Bereitstellung der Java-Version, ich habe sie in Scala konvertiert:
package core
import controllers.routes
object Assets {
def at(path: String): String = {
"/Demo" + routes.Assets.at(path)
}
}
Lösung
Überschreiben Sie einfach den Pfad mit der eigenen Implementierung von Assets (z. B.In utils
Paket):
package utils;
import controllers.routes;
public class MyAssets {
public static String at(String path){
return "/Demo"+ routes.Assets.at(path).toString();
}
}
in Vorlagen:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
Funktioniert das Zielprojekt andererseits auch im Unterverzeichnis?Wenn nicht, ist es einfach einfacher, Subdomains zu verwenden. Dies ist auch mit localhost möglich. Konfigurieren Sie einfach Ihren Nginx für dieses zu verwendende Projekt, z. B.: http://demo.loc
stattdessen od http://localhost/Demo
und füge dies hinzu 'Domain' zu deinem hosts
Datei