2015-02-17 3 views
2

Я запускаю два приложения Play 2.3.x позади nginx. В nginx приложение A настроено для доступа к «/». Приложение B настроено для доступа к «/ appB /».Относительные пути для активов в Play Framework

У меня возникли проблемы с разрешением активов для приложения B при использовании встроенных функций маршрутов/активов (<script src="@routes.Assets.at("someScriptfile.js")") type="text/javascript"></script>). Проблема здесь в том, что URL-адрес будет абсолютным, например /assets/file.png. Это приведет к тому, что прокси-форвард запрос приложению А.

Я хочу использовать путь родственников вместо этого. Это позволит мне запустить приложение B, так и без прокси-сервера. Я хочу, чтобы URL актива быть assets/file.png.

что мое варианты? Я знаю, что могу решить это, используя переписывание контента в прокси, но мы бы

+0

Вы хотите просто удалить ведущую косую черту? –

+0

@ m-z Да, но как это сделать при использовании @ routes.Assets.at ...? – ulejon

ответ

-1

Я только что нашел решение, которое работает.

Редактировать application.conf и добавлять следующее: application.context="/appB/". Это переведет <script src="@routes.Assets.at("someScriptfile.js")" type="text/javascript"></script> в url /appB/assets/someScriptfile.js

0

попробовать что-то вроде этого: для вашего приложения используют B абсолютные URL, но предварять их с «/ AppB /»

package misc; 

import controllers.routes; 

public class BAssets { 

    public static String at(String path) { 
     return "/appB" + routes.Assets.at(path).toString(); 
    } 
} 

Тогда каждый раз, когда вы хотите, чтобы служить какой-то актив для приложения B, вы будете писать как это:

<script src="@misc.BAssets.at("javascripts/hello.js")"></script> 

Если вы хотите, вы можете даже включать больше логики в методе, который вычисляет путь к активу - например, на основе, если приложение находится в режиме разработчика или в прод. Или даже на основе конфигурации прокси (вы можете решить изменить путь к appC завтра).

+0

Hm, который свяжет приложение B с конфигурацией прокси. И не будет ли поиск ресурсов не работать при запуске приложения B без прокси (при разработке)? – ulejon

+0

@ulejon это то, что я имел в виду под «.. вы даже можете включить больше логики ..» - вы можете, например, удалить часть/appB на основе некоторого условия - например. основано на том, что ваше приложение находится в режиме dev или prod – Anton

1

Assets.at возвращает Call, который неявно преобразуется в Scala в String. Получаемый String - это просто URL-адрес, к которому обращается реверсивный маршрутизатор. Если все, что вы хотите сделать, это удалить ведущую косую черту, вы можете drop первый символ.

@routes.Assets.at("someScriptfile.js")").drop(1) 

Или быть супер уверен, что вынимается это только ведущий слэш, вы могли бы использовать stripPrefix.

@routes.Assets.at("someScriptfile.js")").stripPrefix("/") 
Смежные вопросы