Скала/Игра/Нгинкс:статическая маршрутизация ресурсов
-
20-12-2019 - |
Вопрос
У меня запущено приложение Play:
http://localhost:9000
Nginx является прокси-сервером, передающим его по этому URL-адресу:
http://localhost/Demo/
Однако у меня проблема со статическими ресурсами.Например, этот ресурс в шаблоне html
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
собирается
http://localhost/assets/stylesheets/main.css
и, очевидно, приводит к тому, что его не находят.Если я изменю это на это (добавлю /Demo
перед URL):
<link rel="stylesheet" media="screen" href="/Demo@routes.Assets.at("stylesheets/main.css")">
теперь он будет правильно переходить на этот URL-адрес:
http://localhost/Demo/assets/stylesheets/main.css
Мой вопрос:как мне это добавить /Demo
ко всем моим статическим ресурсам без жесткого кодирования их в мои шаблоны?Я предпочитаю решать эту проблему с помощью маршрутизации Play и ограничивать изменения, вносимые в конфигурацию nginx.
Я попытался добавить префикс URL-адреса в application.conf
так
application.context="/Demo"
но это повлияло на все URL-адреса, а не только на статические, так что это не решение.Есть предположения?
Мой стек:Play Framework 2.2.1 / Scala 2.10.3 / Java 8 64Bit / Nginx 1.4.3 / Ubuntu 13.10 64bit
ОБНОВЛЯТЬ:РЕШЕНИЕ Спасибо @biesior за предоставленную версию Java, я преобразовал ее в Scala:
package core
import controllers.routes
object Assets {
def at(path: String): String = {
"/Demo" + routes.Assets.at(path)
}
}
Решение
Просто перезапишите путь, используя собственную реализацию активов (т.в utils
упаковка):
package utils;
import controllers.routes;
public class MyAssets {
public static String at(String path){
return "/Demo"+ routes.Assets.at(path).toString();
}
}
в шаблонах:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
С другой стороны, будет ли целевой проект работать и в подкаталоге?Если нет, то проще использовать поддомены, это возможно и с localhost, просто настройте nginx для использования в этом проекте, т.е.: http://demo.loc
вместо этого ОД http://localhost/Demo
и добавь это 'домен' на ваш hosts
файл