Файл маршрута Playframework: отделите производственные маршруты от маршрутов разработки
Есть ли способ в игре аннотировать маршруты, чтобы сообщить, что определенный раздел / группа маршрутов доступна только в режиме dev или prod
2 ответа:
Ну, это не задокументировано, поэтому я не уверен, возможно ли это намеренно или нет, но я нашел способ заставить это работать. Обратите внимание, однако, поскольку это недокументированная функция, это может означать, что она непреднамеренна и, следовательно, может сломаться в будущих версиях игры.
Вы можете достичь желаемого, используя следующую строку в файле маршрутов.
%{ if (play.mode.isDev()) }%
Я создал тестовое приложение с парой действий
public class Application extends Controller { public static void index() { render(); } public static void noDev() { renderText("NoDev"); } public static void noProd() { renderText("NoProd"); } }
Затем я добавил следующее: мой файл маршрутов
# Home page GET / Application.index # Ignore favicon requests GET /favicon.ico 404 # Map static resources from the /app/public folder to the /public path GET /public/ staticDir:public %{ if (play.mode.isDev()) }% GET /route1 Application.noDev GET /route2 Application.noDev GET /route3 Application.noDev * /{controller}/{action} {controller}.{action} %{ if (play.mode.isProd()) }% GET /route4 Application.noProd GET /route5 Application.noProd GET /route6 Application.noProd * /{controller}/{action} {controller}.{action}
Итак, вы можете видеть, что с помощью простого оператора if он будет выполнять следующую группу маршрутов только в этом режиме. Оператор if завершится, когда будет найден следующий оператор if.
Если в режиме Dev вы попытаетесь получить доступ к route4, вы не сможете получить к нему доступ, и вы увидите страницу RouteNotFound, показывающую, что доступные маршруты-это те, которые вы определили только для Dev.
Для play framework версии 2.x:
- вам нужно иметь другой
routes
файл, скажемprod.routes
в корне вашего приложения (тот же directoy исходногоroutes
файла), этот файл содержит только маршруты, которые вы хотите для производства.- затем вы создаете другой
.conf
файл, напримерprod.conf
внутри папкиconf
.- Теперь этот новый файл conf должен содержать следующее:
Для play framework 2.4 и новее:
include "application.conf" play.http.router=prod.Routes
Или без нового пропуска файла
.conf
параметр:
-Dplay.http.router=prod.Routes
А если старше 2.4 то:
include "application.conf" application.router=prod.Routes
И когда вы запускаете производство, запускайте его с
-Dconfig.file=prod.conf