7

以下の問題のコンテキストで、実行中の play start と play run の違いを理解したいと思います。

私の特定のユースケースはかなり複雑ですが、次のように単純化します。

  • (Global.scala の一部として) 起動時に、私の Play アプリケーションは Java アプリケーション X のエントリ ポイントへの直接メソッド呼び出しを行っています。
  • 初期化の一部として、X は Tomcat の組み込みインスタンスを開始します。
  • X の初期化の最後に、Tomcat が起動してリクエストに応答していることを確認します。

さて、play startこのアプリケーションを実行すると、Tomcat が起動して実行され、X は満足し、人生は続きます。

しかし、私がそうするplay runと、Tomcat は初期化に失敗し、X はそこに座って応答を待機し、最終的にタイムアウトします。

私が使用する必要がある主な理由play runは開発のためです。なぜなら、Eclipse デバッガーを実行して再生するようにアタッチしたいからplay debug runです。

これは単純化しすぎていることは承知していますが、あなたから得たいと思っていることは、Play の実行と Play の開始の違いにつながり、アプリケーションの動作に違いが生じて、この失敗につながる可能性があるということです。

ここで、 http: //www.playframework.com/documentation/2.1.x/ThreadPools に従って Play のデフォルト スレッド プールのスレッド数を増やしてみましたが、うまくいきませんでした。

Play の出力とログには、この問題に関する有益な情報はありません。

Play 2.1.1 を使用しています

4

1 に答える 1

11
  • play runplay アプリケーションを開発モードで起動します。

    これは、play プロンプト内 (実際には SBT 内) から実行され、クラスの自動リロード、テンプレートの自動コンパイルなどを可能にするいくつかのカスタム クラスローダー マジックを使用して実行されることを意味します。アプリケーションを実行するこのカスタム方法は、Tomcat が起動。

    Tomcat からのログ出力またはスタック トレースがなければ、Tomcat が起動しない理由について詳しく説明することは困難です。これは、カスタム クラスローダー (Tomcat など) による分離を提供する別のコンテナー内で Tomcat を起動するのと少し似ています。

    編集:私は自分自身の悲惨な詳細を知りませんが、それはすべてplay run コマンドreloaderで発生します。2.1.x と 2.2.x の間で状況が変わったかどうかはわかりませんが、master でより詳細に文書化されているようです。

  • play startアプリケーションをプロダクション モードで実行するインタラクティブな方法です。

    これは、 の呼び出しと完全に同一であることを意味しjava -cp [...] YourMainClassますが、再生プロンプトからインタラクティブに実行され (Ctrl+Dデタッチする必要があります)、バックグラウンドでは実行されません (そのため、自動展開には適していません)。

ただし、実際の運用では、コマンドを使用してスタンドアロン バージョンを準備し、ドキュメントplay distに記載されているように付属のスクリプトで起動する必要があります。

于 2013-08-13T16:19:23.370 に答える