Странность при развертывании приложения JRuby под Jetty - PullRequest
0 голосов
/ 26 августа 2010

Эта проблема сводит с ума, и я надеюсь, что кто-то может указать мне правильное направление.

Я пытаюсь развернуть экземпляр Redmine на сервлете Jetty.Я создал войну, используя Warbler, создал контекст, и, похоже, он развернут.К сожалению, я вижу следующее поведение:

Если я получаю доступ к своему приложению по его настроенному имени хоста /, я вижу список каталогов каталога webapp.

Если я получаю доступ к приложению, отправляя GETзапрос к / braillewizard (имя контекста) с отправленным настроенным именем хоста, приложение запускается.

Если я отправлю запрос в / braillewizard с заголовком Host:, не включенным в список имен хостов, приложение будетне запускается, и я получаю 404.

Так что может показаться, что виртуальный хостинг частично настроен правильно, но что-то не так.Особенно раздражает то, что я отлично работаю в двух других системах, включая ту, в которой работает Redmine, и все работает нормально.

Единственное отличие, которое я могу себе представить, заключается в этомодна система состоит в том, что я настраиваю vhost для полного доменного имени системы, тогда как в других системах хосты находятся на случайных доменах.Не уверен, что это является фактором, но мои попытки избавиться от конфигурации контекста и перейти с приложением в / root по-прежнему требуют GET /root.

Я также telnetting непосредственно кСервер Jetty, так что это не проблема с моим интерфейсным веб-сервером.

Вот моя конфигурация контекста:

<Configure class="org.mortbay.jetty.webapp.WebAppContext">
  <Set name="war"><SystemProperty name="jetty.home"/>/webapps/braillewizard.war</Set>
  <Set name="contextPath">/</Set>
  <Set name="virtualHosts">
    <Array type="java.lang.String">
      <Item>braillewizard.org</Item>
      <Item>www.braillewizard.org</Item>
    </Array>
  </Set>
</Configure>

И мой web.xml, сгенерированный Warbler:

<!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

  <context-param>
    <param-name>rails.env</param-name>
    <param-value>production</param-value>
  </context-param>

  <context-param>
    <param-name>public.root</param-name>
    <param-value>/</param-value>
  </context-param>


  <filter>
    <filter-name>RackFilter</filter-name>
    <filter-class>org.jruby.rack.RackFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>RackFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <listener>
    <listener-class>org.jruby.rack.rails.RailsServletContextListener</listener-class>
  </listener>


</web-app>

Если есть что-то еще, что я могу предоставить, пожалуйста, дайте мне знать.Я искал решение в течение нескольких часов и ничего не нашел.

Редактировать: ОК, вот еще несколько деталей.Идея, что / контекст работал, не совсем верно.Скорее, приложение не загружалось, и я почему-то не смог увидеть исключение.Позже были внесены различные изменения, и проблема, похоже, немного изменилась.

Кажется, что / не выполняется какой-либо маршрут, связанный с / в приложении Rails.Скорее, это вызывает список каталогов для папки веб-приложения.Если я обращаюсь к URL в моем приложении напрямую, кроме / конечно, все, кажется, работает хорошо.

Вызов Jetty с -DDEBUG, поскольку аргумент JVM, кажется, указывает, что RackHandler поражен, а затем падает черезк обработчику по умолчанию.Это может показаться совместимым с не работающим обработчиком, но я не уверен, почему я вижу поведение в одной версии этого развертывания, а не в другой.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2010

У меня также была эта проблема при развертывании приложения Rails с использованием Warbler с Jetty.Исправление, которое сработало для меня, состояло в том, чтобы установить параметр dirAllowed в сервлете по умолчанию на false, т.е.'to' отображать список каталогов '- изменение этого параметра вызывает отправку запроса в ваше приложение Rails.

0 голосов
/ 28 августа 2010

Мне было предложено, что это происходит из-за ошибки, внесенной в адаптер JRuby Rack 1.0.2, и что исправление включает в себя понижение до 1.0.1.Хотя я еще не тестировал это решение, оно согласуется с тем, почему версия на одном сервере может работать, а на другом - не работает.

Я попробую и обновлю этот вопрос с результатами позже, но сейчасэта проблема в значительной степени подорвала мое желание ненадолго поработать с этим.:) На данный момент это работает, потому что у меня есть перезапись URL на месте, и этого достаточно для меня.

...