問題タブ [psgi]
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 - Plack::Builder で「ホスト」をマウントします
Plack::Builderの概要とこの回答には次のように書かれています。
私は次のことを試しました:
しかし、それを実行しようとすると、plackup
次のようになりました。
/tmp/app.psgi の読み込み中にエラーが発生しました: パスは、/home/cw/.anyenv/envs/plenv/versions/5.20.3/lib/perl5/site_perl/5.20.3/Plack/Builder.pm で / で始まる必要があります108行目。
なにが問題ですか?
apache - uWSGI + Apache で Dancer アプリが失敗するのはなぜですか?
私のDancerアプリは、uWSGI (2.0.7) + Apache (2.4.10) の組み合わせで失敗しますが、他の環境 (uWSGI + nginx、Starman + Apache、Dancer 独自の開発サーバー) では自由に実行されます。ログに意味のある情報が見つかりません。だから私は簡単なテストアプリを作りました
production.yml
次に、 defaultをにコピーし、次のように作成されたものuwsgi.yml
にリンクbin/app.pl
します。bin/app.psgi
tset.ini
この ini を で uWsgi で使用できるようにし/etc/uwsgi/apps-available
、 にリンクしました/etc/uwsgi/apps-enabled
。
サービスを再開uwsgi
しました。
次に、Apache (2.4.10) モジュールの場合mod-proxy-uwsgi
、virtualhost conf にいくつかの行を追加しました。
ここに設定する必要があるように感じuWSGIModifier1 5
ますが、場所と方法がわかりませんでした。
Apache を再起動すると、「内部サーバー エラー」が発生しました。uwsgi ログには、次のように表示されます。
この「使用できない修飾子が要求されました」とは何ですか?
apache error.log にはエントリがなく、access.log にはエントリがありますが、ステータス 500 以外の情報はありません。
このような動作は上記の手順で再現できるので、この組み合わせの何が問題なのかを理解していただければ幸いです。
perl - マルチサイト対応の PSGI アプリケーション開発
Plack::Builderでは、複数のホストをマウントできます。たとえば、次のスニペットのようなものです。
例えば
- は、、、...
load_site_names
のようなサイトのリストを返します。http://example.com
http://some.other.site.com
- すべての「仮想ホスト」は同じものを使用します
Some::PsgiFramework::MyApp
- 設定が違うだけ
私は正確に上記を必要としています - 異なる(トラフィックの少ない)サイトのハンダートに展開する必要がある1つの単純なWebアプリを開発する必要があり、サイトごとに異なるPSGIサーバーをセットアップしたくない.
ただし、Plack 自体の作成者は ( Plack::Requestで)と述べています。
このモジュールは、アプリケーション開発者 (エンド ユーザー) ではなく、Plack ミドルウェア開発者および Web アプリケーション フレームワーク開発者によって使用されることを意図していることに注意してください。
Plack::Request を使用して Web アプリケーションを直接作成することは確かに可能ですが、お勧めしません: mod_perl の Apache::Request: でそうするようなものですが、レベルが低すぎます。
フレームワークではなく Web アプリケーションを作成している場合は、PSGI ( http://plackperl.org/#frameworks )をサポートする Web アプリケーション フレームワークの 1 つを使用するか、HTTP::Engine などのモジュールを参照することをお勧めします。 PSGI の上に高レベルのリクエストおよびレスポンス API を提供します。
そして、これが問題です。
MetaCPAN でさまざまな PSGI ベースのフレームワークの多くをチェックしました。そして、AFAIKはそれぞれシングルトンベースです。たとえば、同じapp.psgi
.
質問は次のとおりです。
- MetaCPAN (またはドキュメント) で何かを見逃していました。ここには 、?
app.psgi
- または私は開発を余儀なくされてい
Just Another My Own PSGI Framework
ますか?(正直、触媒は重すぎてチェックしていません) - それとも「取り付け」をよく理解していませんか?
perl - ダンサー固有のリクエスト ID
Dancer に一意のリクエスト ID はありますか?
Apache には mod_unique_id があります: http://httpd.apache.org/docs/current/mod/mod_unique_id.html
PSGI/Plack にはミドルウェア モジュールがあります: http://search.cpan.org/~bayashi/Plack-Middleware-RequestId-0.02/lib/Plack/Middleware/RequestId.pm
しかし、私が見逃したダンサーにネイティブなものはありますか?
perl - PSGI - 各 prefork-child のコンストラクター
分岐後の各子のコンストラクターについて質問があります。例えば:
このコードは機能していますが、これは悪い習慣です。そのようなものを作成したいと思います
Starman や Feersum のような prefork-server でどのように機能するかを誰かが説明してくれることを願っています (しかし、ある男 "Audrey Tang" は、Feersum はそれは良い考えではないと教えてくれました)
だから - あなたの答えに感謝します
perl - 応答なしで PSGI 接続を閉じる方法は?
$env->{'psgix.io'}
私のアプリケーションは、さらなる WebSocket 処理のために別のプロセスにハンドルを渡したいと考えています。UNIX ソケットdup()
のハンドルを介して渡すので、アプリケーションから PSGI サーバーに応答を返す必要はありません。しかし、アプリケーションからの応答を返さずに、黙って接続を閉じるオプションはありません。何も返さないと、PSGI サーバーは満足せず、「500 Internal Server Error」をログに記録します。のようなコード参照だけを返すとsub {}
、Twiggy は満足しますが、uWSGI はそうではありません。他の有効な PSGI 回答は、WebSocket プロトコルを破ります。
WebSocketハンドシェイクの最後の部分をPSGIの回答として生で処理して返そうとしdup()
ましたが、uWSGIでは機能しましたが、Twiggyでは機能しませんでした。
私はさまざまな PSGI/WebSocket 実装を調べましたが、次のいずれかを実行します。
- WebSocket が閉じられるまで、ハンドラーからまったく戻らないでください。
- ある種のを返し
sub {}
ます。
PSGIプロトコルで応答を返さず、静かに接続を閉じる正しい方法は何ですか?
更新: Twiggy がPSGI キャンセルメッセージ[]
として使用しているようです。同じことを行うための私のパッチは正常にマージされました。uwsgi