0

この問題は気が狂っています。誰かが私を正しい方向に向けてくれることを願っています。

Redmine のインスタンスを Jetty サーブレットにデプロイしようとしています。Warbler を使用して戦争を作成し、コンテキストを作成したところ、デプロイされたようです。残念ながら、次の動作が見られます。

構成されたホスト名の / でアプリにアクセスすると、webapp ディレクトリのディレクトリ リストが表示されます。

/braillewizard (コンテキスト名) に GET 要求を送信し、構成済みのホスト名を送信してアプリにアクセスすると、アプリが実行されます。

ホスト名のリストに含まれていない Host: ヘッダーを含むリクエストを /braillewizard に送信すると、アプリは実行されず、404 が返されます。

したがって、仮想ホスティングが部分的に正しく構成されているように見えますが、何かが正しくありません。特に厄介なことは、Redmine を実行するシステムを含む他の 2 つのシステムで同様のセットアップを正常に実行していて、すべて正常に動作することです

この 1 つのシステムで考えられる唯一の違いは、システムの FQDN に対して vhost を設定しているのに対し、他のシステムではホストが付随的なドメインにあることです。それが要因かどうかはわかりませんが、コンテキスト構成を取り除き、/root でアプリを使用しようとすると、まだ /root の GET が必要なようです。

また、Jetty サーバーに直接 telnet で接続しているので、これはフロントエンド Web サーバーの問題ではありません。

ここに私のコンテキスト設定があります:

<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>

そして、Warbler によって生成された私の web.xml:

<!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>

他に提供できるものがあれば、お知らせください。私は何時間も解決策を探していましたが、何も見つかりませんでした。

編集:OK、ここにいくつかの詳細があります。/context が機能するという考えは正確には正しくありませんでした。むしろ、アプリの読み込みに失敗していて、何らかの理由で例外が表示されませんでした。後でさまざまな調整を行い、問題は少し異なるようです。

Railsアプリで / に接続されているルートが / 実行されていないようです。むしろ、webapp フォルダーのディレクトリ リストをトリガーしています。/ もちろん、アプリで URL に直接アクセスすると、すべてがうまく機能しているように見えます。

-DDEBUG を JVM 引数として使用して Jetty を呼び出すと、RackHandler がヒットし、その後デフォルト ハンドラーに落ちていることを示しているようです。これは、ハンドラーが実行されていないことと一致しているように見えますが、この展開のあるバージョンで動作が見られ、別のバージョンでは見られない理由がわかりません。

4

2 に答える 2

0

この動作は、JRuby Rack アダプター 1.0.2 で導入されたバグによるものであり、修正には 1.0.1 へのダウングレードが必要であることが示唆されました。このソリューションはまだテストしていませんが、あるサーバーのバージョンが機能し、別のサーバーでは失敗する理由と一致しています。

私はそれを試して、後でこの質問を結果で更新しますが、現在、この問題は、しばらくの間、この問題を台無しにする私の意志をほとんど奪いました. :) 今のところ、URL の書き換えが行われているので動作します。これで十分です。

于 2010-08-27T22:19:19.250 に答える
0

また、Jetty で Warbler を使用して Rails アプリをデプロイする際にも、この問題が発生しました。私にとってうまくいった修正はdirAllowed、デフォルトのサーブレットのパラメーターをにfalse設定することでした。

<init-param>
  <param-name>dirAllowed</param-name>
  <param-value>false</param-value>
</init-param>

デフォルトの動作は、「ウェルカム ファイルが見つかりません」から「ディレクトリ リストを表示する」に移行することだと思います。このパラメーターを変更すると、代わりにリクエストが Rails アプリにディスパッチされます。

于 2010-09-18T20:00:39.450 に答える