Файл маршрута Playframework: отделите производственные маршруты от маршрутов разработки


Есть ли способ в игре аннотировать маршруты, чтобы сообщить, что определенный раздел / группа маршрутов доступна только в режиме dev или prod

2 25

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