問題タブ [plack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - Test::WWW::Mechanize::PSGI がポートを使用するのはなぜですか?
次のようなコードがあります。
ただし、が呼び出されるとすぐにget_ok()
、次の警告が表示されます。
はい、そのポートを別の用途に使用しています。Test::WWW::Mechanize::PSGI のドキュメントから:
このモジュールを使用すると、PSGI Web アプリケーションをテストできますが、サーバーや HTTP 要求を発行する必要はありません。代わりに、HTTP 要求オブジェクトを直接 PSGI に渡します。
したがって、理論的にはポートを指定する必要はありませんが、上記の警告が表示され、フェッチされたページは 500 を返します (ブラウザーでは正常に動作します)。私は何が欠けていますか?
- Test::WWW::Mechanize::PSGI バージョン 0.35
- Plack バージョン 1.0030
- Catalyst バージョン 5.90051
に変更MyApp->run
すると、次のようになりMyApp->psgi_app
ます。
このエラーは、次の方法で再現できます。
multithreading - Plack リクエスト ハンドラをバックグラウンドで実行するにはどうすればよいですか?
を使用して実行する単純な Plack アプリ ( Plack::App::GitHub::WebHookのようなもの) がありますplackup
。リクエスト ハンドラーで長時間の操作を実行すると、現在、操作が完了するまでアプリが後続のリクエストに応答しなくなります。他のリクエストをブロックせずにバックグラウンドで操作を実行するにはどうすればよいですか? フォローアップの質問ですが、そのバックグラウンド キューで最大 1 つのジョブを実行し続けるにはどうすればよいですか?
私はlibdispatchに慣れているので、次のようなものが好きです:
perl - Catalyst で Plack::Middleware 互換の例外を使用すると、ログ出力が欠落する
私のCatalyst
プロジェクトでは、コマンドラインアプリケーションとMoose
互換性のある独自の例外タイプを使用しています。Catalyst
Catalyst REST インターフェイスのクライアントにエラー メッセージを提供するために、code
http ステータス コードを例外クラスの一部として提供するサブルーチンを実装しました。Plack::Middleware
このように、のポッドのドキュメントに記載されているように使用したいと思いPlack::Middleware::HTTPExceptions
ます。
すべて正常に動作します。例外は、私が望む方法でクライアントに返されます。
私の問題は次のとおりです。例外をスローすると、それがミドルウェアによって捕捉され、ロギング ( ) が失われ、の Web サーバーの perl スクリプト出力Log::Log4perl
にトレースもエラーも見つかりません。Catalyst
例外クラスによってカプセル化されていないがまれな文字列 ( などdie "BOOM!"
) であるエラーをスローするたびに、ログ出力が書き込まれ、エラーが文書化されます (明らかに、エラーはキャッチされCatalyst
、再スローされません)。
Catalyst
例外をミドルウェアに再スローする必要がある場合でも、ログ要求を保持するように指示するにはどうすればよいですか?
perl - perl plack アプリで非ブロッキング応答を実装するにはどうすればよいですか?
私はTwiggy::Server
(plackアプリを意味する)を使用して、perlベースのWebサーバーを作成しようとしています。データを生成し、それをクライアント Web ページに返すための JSON 文字列に変換する、おそらく時間のかかるサブルーチンを実行して、一部のデータに対する要求 (Web ページでの ajax 呼び出しからの要求) に応答したいと考えています。
ここで、私のサーバーの簡易テスト バージョンを確認できます: http://pastebin.com/iNaDTVwL
この例は、現在の実装で直面している問題を示しています。AnyEvent::ForkManager
物事の非ブロッキング部分を行うために使用すると、「大きな」json 応答が切り捨てられます。
このドキュメントは私の質問に完全に答えます (そして、私がやろうとしていることをよりよく説明しています): https://github.com/jjn1056/Example-PlackStreamingAndNonblocking ... 終了した場合。AnyEvent::ForkManager
少しハックのように見えるものを使用する代わりに、ノンブロッキングを行う「適切な」方法が欠けているだけです。