приложение cloudbees+lift = сломанная навигация

Я использовал Lift в качестве основы для личного веб-сайта, и, пытаясь убрать сервер с моего компьютера, я обратился к Cloudbees. Я развернул свое приложение в облаке в виде .war файла и начал просмотр.

редактировать. Очевидно, это не имеет ничего общего с Cloudbees. Это проблема Tomcat.

Локально мое приложение будет служить localhost:8008/demos страницей demos.html. Но на Cloudbees [URL]/demos автоматически перенаправляет на [URL]/demos/ и выдает ошибку 404. Если я захожу на [URL]/demos.html напрямую, все работает нормально.

Я хотел бы избежать явного суффикса ".html" на своих страницах. Как я могу заставить это работать, чтобы все вело себя так, как когда я запускаю локально?


person Dylan    schedule 30.04.2013    source источник


Ответы (2)


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

Проблема

Cloudbees использует Tomcat (не Jetty, который используется с веб-плагином sbt через container:start). Как следует из Где Tomcat добавляет / к путям к каталогам? Tomcat добавить / к путям, которые он считает каталогами.

Со структурой приложения, такой как

src/main/webapp
 - demos.html
 - demos
   - some-demo.html

И определение карты сайта для лифта, которое включало

Menu.i("Demos") / "demos" submenus (
  Menu.i("Some Demo") / "demos" / "some-demo"
)

Tomcat видел URL-адрес «/ demos» и видел мою папку «demos» и предположил, что мой URL-адрес был ошибкой, добавив косую черту.

Решение

Обойти проблему с небольшой перестановкой. Сначала переместите demos.html в папку demos и переименуйте ее в index.html.

src/main/webapp
 - demos
   - index.html (formerly demos.html)
   - some-demo.html

Настройте карту сайта, чтобы отразить это изменение.

Menu.i("Demos") / "demos" / "index" submenus (...)
                            ^ added an extra path step

Теперь моя автоматически сгенерированная карта сайта будет указывать прямо на /demos/, и Tomcat с радостью обслуживает мой файл demos/index.html в этом месте.

person Dylan    schedule 30.04.2013
comment
Из любопытства, как у вас отображается сервлет Lift в web.xml? Мы используем Tomcat с Lift в нескольких приложениях и давно не сталкивались с этой проблемой. Насколько я помню из чтения упомянутой ветки, это как-то связано с тем, как она была смонтирована. - person jcern; 30.04.2013
comment
@jcern Я сейчас на работе, поэтому не могу вам точно сказать, но, если я правильно помню, это просто стандартный файл web.xml, поставляемый с демонстрацией лифта, когда я начал проект. Есть фильтр LiftFilter и сопоставление фильтров, которое применяет его к /*. - person Dylan; 30.04.2013

Вы можете попробовать запустить войну локально (в tomcat) и посмотреть, произойдет ли это? это не похоже на что-то конкретное для кота на облачных пчелах

person Michael Neale    schedule 30.04.2013
comment
Я не очень хорошо знаком с Tomcat (только sbt и container:start, что, я думаю, относится к Jetty)... терпите меня, пока я пытаюсь сделать эту работу. - person Dylan; 30.04.2013
comment
Хорошо, похоже, у меня возникает та же проблема, когда я развертываю свою войну на локальном сервере Tomcat. - person Dylan; 30.04.2013
comment
да, это странно, многие используют tomcat. Если вы можете создать приложение со встроенным причалом (например, jar или zip), вы можете запустить его как есть на CloudBees, если это поможет. - person Michael Neale; 30.04.2013