С помощью URLMap
вы указываете базовый URL, где должно быть установлено приложение. Путь, указанный на карте, не используется при определении того, какой маршрут использовать в самом приложении. Другими словами, приложение действует так, как если бы его корневой каталог был после пути, используемого в URLMap
.
Например, ваш код будет отвечать на следующие пути:
/
: будет перенаправлен на маршрут /
в MyApp
/another
: пойдет по маршруту /
в AnotherRoute
. Поскольку AnotherRoute
extends MyApp
, это будет то же самое, что и /
в MyApp
(но в другом случае).
URLMap
видит /another
и использует его для сопоставления с AnotherRoute
, удаляя эту часть запроса с пути. AnotherRoute
тогда видит только /
.
/another/another
: будет перенаправлен на два /another
маршрута в AnotherRoute
. Опять же, первый another
используется URLMap для направления запроса на AnotherRoute
. AnotherRoute
тогда видит только второй another
как путь.
Обратите внимание, что этот путь будет отвечать на запросы GET
и POST
, каждый из которых обрабатывается соответствующим блоком.
Непонятно, что вы пытаетесь сделать, но я думаю, что вы можете добиться того, чего хотите, запустив экземпляр AnotherRoute
, с config.ru
, который просто:
run AnotherRoute.new
Поскольку AnotherRoute
расширяет MyApp
, для него будет определен маршрут /
.
Если вы ищете способ добавления маршрутов к существующему приложению Sinatra, вы можете создать модуль с included
методом, который добавляет маршруты вместо использования наследования.