問題タブ [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.
configuration - Starman (または他の PSGI サーバー) でディレクトリ エイリアスを構成する
私は、Apache httpd.conf で別のディレクトリにエイリアスを設定することに慣れています。たとえば、次のように動作します
次に<script src="/lib/jquery/plugin/funky.js"></script>
、アプリケーションパスに関係なく、などのパスを含めることができます。
Starman (および HTTP::Server::PSGI などの他の PSGI サーバー) を試していますが、エイリアスなどの構成パラメーターをディレクトリに設定する方法がわかりません。
これはできますか?どのように?
perl - PSGIの応答:PSGIおよびPlackでどのような種類のファイルハンドルが機能すると予想されますか?
PSGI仕様では、HTTP応答を3つの部分で構成されていると定義しており、そのうちの3番目は配列参照またはファイルハンドルのいずれかです。ファイルハンドルは次のとおりです。
IO::Handleのようなオブジェクトまたは組み込みのファイルハンドル。
そして、仕様は次のように続けています。
サーバーは、filenoとScalar :: Util :: reftypeを使用して、本体が実際のファイルハンドルであるかどうかを確認できます。ファイル記述子を持つ実際のファイルハンドルである場合は、sendfile(2)などの手法を使用してファイル配信を最適化できます。
plackup
(Plackバージョン0.9978)を使用してコマンドラインの例をまとめましたが、本文が実際のファイルハンドルであるかどうかを確認すると、致命的なエラーが発生するようです。
Can't locate object method "FILENO" via package "IO::Scalar" at /usr/lib/perl5/5.10/i686-cygwin/IO/Handle.pm line 390
コマンドラインの例は次のとおりです。
もちろん、ファイルハンドルを使用することはできませんでした。
しかし、私は何が機能し、何が機能しないかに興味があります。FILENO
では、例外が発生しないように、ハンドルを呼び出すときにPlackはもっと注意を払うべきではありませんか?
そしてもう1つ追加するには:
ファイルハンドルがそのように認識されていないようです。エラーメッセージは次のとおりです。
body should be an array ref or filehandle at /usr/lib/perl5/site_perl/5.10/Plack/Middleware/StackTrace.pm line 35
アップデート:
ysthが彼の回答で述べたように、以下は機能します(少なくともCygwinの5.10.1では):
しかし、明らかに、失敗した例からわかるようにどこかに問題があり、それが実際に何であるかを決心したら報告されます。
perl - 多言語PSGI-Web展開
PSGI/Plackを使って1つのWebアプリケーションを開発する予定です。(おそらくダンサーと一緒ですが、まだ決定されていません)。
アプリケーションはutf8である必要があり、多言語(Locale :: Maketextを使用)および(ofc)には、指定された言語の静的ページが含まれます。私の考えはen.example.com
、de.example.com
などのさまざまな言語ドメインにデプロイすることです。アプリケーション自体は単純で、ほとんどの場合、ローカライズされたテキストとその他の(軽い)機能でテンプレートを埋めるだけです。
1台の物理マシンに複数の言語ベースのサブドメイン用に1つのアプリケーションをデプロイするための最良のソリューションは何ですか?
私の現在の研究はこのソリューションで終わりました。すべての言語サブドメインにApacheとその名前ベースの仮想サーバーを使用する必要があります。
質問:
- 最善の解決策は何ですか?
- Starmanまたは他のpure-perlサーバーを使用したソリューションはありますか?はいの場合、どのように?リバースプロキシ?
- 純粋なperlソリューションはより良く(より速く)なりますか?
- 他の解決策を検討する必要がありますか?(fcgi、nginxなど...)
開発自体に影響を与える可能性のある他のアイデア/ものはありますか?
perl - Starman で Apache のような名前ベースの仮想ホストをセットアップする方法
前回の質問で、マルチドメイン ソリューションについて尋ねましたが、質問が複雑すぎました。
要するに:
Apache のディレクティブのように、Starman (または他の純粋な perl PSGI サーバー) を使用して、名前ベースの仮想ホストを何らかの方法でセットアップすることは可能ですか? <VirtualHost ...>
それとも、この種の機能を得るために Apache を使用する必要がありますか?
何か案が?
perl - あるPlackアプリケーションが別のアプリケーションに影響を与えるにはどうすればよいですか?
私はこれを持っています:
$config_app
構成値をファイルに保存しapp.cfg
、$app
それをconfig-fileとしてロードします。すべてのリクエストで設定ファイルを読み取る必要はありません。アプリケーションの開始時にそれを読み、変更されたときにそれを再読する必要があります。
これを達成するための最良の方法は何ですか?
私の唯一のアイデアは次のとおりです。アプリは最後のconfig_read_timeを記憶し、すべてのリクエストでの変更時刻をチェックしapp.cfg
ます。ファイルが変更された場合は、再読み込みします。
ここにもっと良い解決策はありますか?(たとえば、$ config_appが新しい構成を保存したときなど、$config_appと$appの間のメッセージを意味しwill send some message to $app: re-read the config
ます。
perl - plackup (または starman) のメモリ使用量が増えるのはなぜですか?
この単純な PSGI アプリケーション (app.psgi) があります。
1000 回以上のリクエストがあり、メモリ使用量が増加しました。サーバーの起動方法に応じて、次のようになりました。
plackup
- メモリ使用量は最初の 3 つのリクエストで上昇し、次の 997 リクエストまで一定のままですplackup -r
- メモリ使用量が (リクエストごとではなく) ランダムに 4k 増加しています。starman
- 上記のように、メモリ使用量はランダムに 4k 増加しますが、速度は遅くなります
質問は:
- メモリ使用量が増えているのはなぜですか? リークはどこにあり、どのようにして一定のメモリ使用量を達成するのですか (特に starman で)。長期的にはメモリが不足したくないからです。(OK、たとえば --max-requests 100 を定義することは可能です)が、メモリ使用量の答えではありません。
- または- 私の例では何が間違っていますか?
誰かがこれもテストしたい場合は、フェッチ用のスクリプトを次に示します。
私の結果:
そう、
- なぜ
plackup
最初の 3 つのリクエストでレイズするのですか? plackup -r
- 4k の増加 (最後の行を参照) - 最初はもっと多いstarman
- 値上げもしますが、デフォルトでは 5 ワーカーで速度が遅くなります (3280->3912)
バージョン:
perl - PSGI: それは何ですか?
私の Web プロジェクトが PSGI を使用した実装の候補であるかどうかを判断しようとしてきましたが、この段階ではアプリケーションにどのような効果があるかわかりません。
私はすべての大騒ぎを本当に理解していません。私には、PSGI は異なる Apache モジュール間でアプリケーションを移動できる共通のインターフェースを提供するフレームワークのように思えます。たとえば、アプリケーションを mod_perl で実行するものから fastcgi に簡単に移行し、両方のオプションで実行するためのアプリケーション サポートを提供します。
そうですか、それとも何か見逃しましたか?
私と私が所属するチームは、アプリケーションを開発するだけでなく、サーバーのメンテナンスとセットアップも行っているため、fastcgi、cgi、および mod_perl で実行できることの価値はわかりません。 mod_perl だけで問題ありません。
PSGI の機能を誤解していますか、それとも単に私のプロジェクトに適していないのでしょうか?
perl - Plack アプリケーションはどのようにして複数のロガーにログを記録できますか?
Plack Middleware は、アプリケーションとは独立してロギング ターゲットを構成する場合などに非常に便利です。しかし、同時に複数のロガーを使用する方法が見つかりませんでした:
この構成では、「SimpleLogger」は「ConsoleLogger」によってミュートされますが、両方で同時にログを記録したいと考えています。
perl - プラック&テイントモード
perl の taint モードで Plack アプリケーション (ミドルウェア) を開発することは推奨されますか?
はいの場合、汚染されたモードでplackupおよび/またはStarmanを開始する方法は? シバンラインで簡単にできたシンプルなCGIスクリプトで。
perl -T /path/to/{plackup|starman}
仕事をしますか?または、ここに推奨される方法はありますか?それとも非推奨ですか?
Plack + Taint モードの組み合わせに関するアイデア、ポインタ、記事はありますか?
perl - Test :: WWW :: Mechanize :: PSGIを使用してDancerアプリケーションをテストするにはどうすればよいですか?
wwwmechanizeのスクリプトアプリを設定する正しい方法がわかりません。動作する代替案を少なくとも1つ試しましたが、テストスイートを使用してロギングをより静かにすることができるように、テストで構成を渡そうとしています。
スクリプトで実行do
するとテストを実行できるように見えますが、ロギング変数が正しく設定されておらず、同時にそれを行うためのより良い方法があるようです。
アップデート
私は解決策に近づいているかもしれないと思います...
これは、PlackPSGIのDancer::Deploymentドキュメントから取得しました。ただし、テストで500エラーが発生します。
DBIエラーはここでは関係ありませんが、私が取得するエラー出力の一部です。なぜ見つからないのかわかりません/login/default.tt
。問題のテンプレートがにあるので、ビューフォルダがどこにあるのかわからないことが問題だと思いますviews/login/default.tt
。このビューは、で実行している場合でもブラウザで正常に機能しplackup
ます。私は困惑しています。