問題タブ [mod-perl2]
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.
windows - Devel::Cover は Perl 5.10 for Windows の mod_perl2 で動作しますか?
mod_perl2 と Perl 5.10 の 2 つはうまく連携していますが、 Devel::Coverが Win32 で mod_perl2 と連携することについて肯定的な情報を見つけることができないようです。私は現在、ActiveState の Perl 5.10 を使用していますが、この組み合わせが機能することを意味するのであれば、Strawberry Perl に切り替えても構わないと思います。
また、Devel::Cover PPD は ActiveState、Bribes、UWinnipeg、または Trouchelle から Perl 5.10 で利用できないようです。 ?
perl - mod_perl の BEGIN ブロックで Apache サーバー構成にアクセスするにはどうすればよいですか?
PerlSetEnv の使用からカスタム構成ディレクティブの使用に切り替えようとしています。set_val
ドキュメントからのコピーを含む構成モジュールがあります。
...すべてのカスタム ディレクティブ サブルーチンによって呼び出されます。次に、.conf に次のように記述します。
これは、 httpd -t がファイルの構文を許可するという点でうまく機能します。問題は、BEGIN ブロック内から構成ファイルの値を取得できないように見えることです。これを行う必要があります。
私はあらゆる種類のものをいじってみました:
...しかし、役に立たない。私の努力のほとんど(CmdParms->server
たとえばアクセスしようとする)の結果、Parent: child process exited with status 3221225477 -- Restarting
Apacheが自動的に再起動されます。私が合格した場合ServerUtil->server to get_config()
、サーバーは存続しますが、警告は「1」のみを出力します。
BEGIN
リクエストはさまざまであるため、ブロック内でリクエストに関連するものを取得できないためであるとどこかで読みました。PerlOptions +GlobalRequest を使用し$ENV
てブロック内で見ることができたことを除いて、それはある程度理にかなっていBEGIN
ますが、リクエストがどのように発生するかに依存しているのと同じように、自分のディレクティブを見ることができないのはなぜですか? 特に紛らわしいのは、 に渡そうとするとApache2::RequestUtil->request->per\_dir\_config()
、ブロック内でそれが真である場合、どうすれば に到達できるかというget_config()
ことGlobal $r object is not available.
です。BEGIN
$ENV
windows - mod_perl2 で動作するコード プロファイリングやコード カバレッジ モジュールはどこにありますか?
mod_perl2 でこの機能を取得する方法はありますか?
また、コマンド ラインではなく Web リクエストを介してトリガーできますか? または、スクリプトが必要とする $ENV 変数、クエリ文字列、Cookie を偽造し、コマンド ラインを使用する必要がありますか?
Google と CPAN の検索はすべて、そもそも mod_perl をサポートしていない、またはサポートしているが古く、mod_perl2 について言及していないものを指しているようです。
perl - mod_perl2で適切にフォークするにはどうすればよいですか?
mod_perl2で実行されているコードから実行時間の長いプロセスをフォークするのに問題があります。
ほとんどすべてが機能しますが、フォークされたプロセスはApacheのログファイルへのオープンハンドルを保持しているようです-これは、プロセスの実行中にApacheが再起動しないことを意味します(「ログファイルを開けませんでした」というメッセージが表示されます)。
これが私が使用しているコードです:
mod_perl1の時代に、$r->cleanup_for_exec
この問題を解決するために使用したことを思い出しますが、mod_perl2ではサポートされていないようです。(編集:どうやらそれはもう必要ありません..)
これらの問題なしにmod_perl2から長時間実行プロセスを正しく開始する方法に関するアドバイスをいただければ幸いです。
perl - mod_perl2変数とプロセスの破損
かなり大きなコードベースを古代のPerl5.005.03CGI環境からmod_perl2に移植したばかりですが、パブリックベータが行われているため、時々発生する問題がいくつかあります。これらは、サーバーを再起動する必要があるまで蓄積されます。
すべてのコードはstrictを使用してコンパイルされますが、以前はコンパイル、実行、および破棄されたCGIスクリプトとして呼び出されていました。これまでに発生した問題:古いスタイルのグローバルファイルハンドル(ではなく)を使用した設定$|
または呼び出し。また、パブリックベータを開始した直後に、ポート80と443でリッスンしている/ bin/tailや/usr/ sbin / sendmailを見つけたため、サーバーの再起動が停止しました。それ以来、純粋なPerlメソッドを使用するようにそのコードを書き直しましたが、その問題はもうありません。STDOUT->autoflush(1);
open(ERRORFILE, $errorfile)
open(my $fh_error, $errorfile)
system()
2つの問題が残っています。1つ目は、ログがmod_perlでいっぱいで、定数が再定義されたことについて不平を言っていることです。
また、一見コア変数がゴミ箱に入れられることもあります。コアの社内モジュールの1つは、スクリプトのPIDと名前に関する情報をログに記録し、次のような情報を生成します。
それ以外の場合、プロセスIDは最終的に。になりundef
ます。これはまれで断続的です。
次に、断続的に、ガベージコレクションが開始されないことがあります(おそらく弱参照の問題ですか?しかし、ほとんどの場合、すべてが正常に機能します)。これの最も直接的な症状は、データベースハンドルが開かれ、閉じられないことです。しかし、この問題を深く掘り下げると、標準のPerlハッシュオブジェクトにDBIオブジェクトが格納されており、そのオブジェクトのDESTROY
メソッドが(まれに、断続的に)呼び出されないことが明らかになります。
Debian 5.0(Lenny)、Perl 5.10.0、Apache 2.29、mod_perl 2.0.4、openSSL0.9.8gを実行しています。必要に応じてもっと情報を提供することもできますが、それが基本だと思います。
/ etc / apache2 / sites-enabled / * sitename*であるapacheconfigの重要な部分は、次のとおりです(機密保持の理由で一部編集されています)。
いくつかのSSL、書き換え、リダイレクトが行われていますが、それは重要なことです。
これは誰にも馴染みがあるように聞こえますか?あるいは、問題をさらにデバッグする方法を誰かが推奨できますか?
perl - 「local our」は mod_perl2 の下のオブジェクト モジュールで使用するものですか、それともスクリプトでのみ使用するものですか?
スクリプトを mp2 向けに調整し、互換性ラッパーなどの必要性を回避するには、「my」ではなく「local our」を使用して変数を宣言する必要があると言われています。モジュールではどうですか?
そうですか?または、モジュールの残りの部分が「use strict」の下で $self に到達できるように、「my」にする必要がありますか?
perl - 再起動せずに mod_perl2 モジュールをデバッグするにはどうすればよいですか?
環境: Apache/2.2.11 (Win32) mod_apreq2-20051231/2.6.2-dev mod_perl/2.0.4-dev Perl/v5.10.0
win32 を使用していることを除いて、このディスカッション リストの投稿に記載されている状況と非常によく似ています。
私はhttpd.confにこれを持っています:
...および mod-perl スクリプト処理のみ。
MyPackage モジュールを使用するスクリプトがあり、動作しています。
モジュールを壊して、スクリプトをリロードします。エラーは役に立つもので、モジュールを壊した行を教えてくれます。
(この時点で再度リロードすると、最初にファイルをロードできなかったため、「Undefined subroutine &ModPerl::ROOT::ModPerl::Registry...」としか表示されません。しかし、いずれにしても、次のようになります。動作は引き続き発生します。)
ブレークを元に戻し、スクリプト ファイルにも触れて、モジュールをリロードし、リロードします。今それは言います:
また、スクリプトとモジュールに触れても、Web サーバーを再起動しない限り、正しくリロードできません。
(モジュールではなく) スクリプト自体を壊すだけでも問題なく動作します。適切なエラーが発生し、それを元に戻すと、リロード時に再び動作するようになります。
これらの各作業の後、テストする前に Web サーバーを再起動しました。
トレースを試みましたが、引き続きエラーが発生するのは ModPerl/RegistryCooker.pm の 204 行目です。これは、スクリプト全体を評価する行です。{}
スクリプトとモジュールで「use warnings FATAL => 'all'」を「use warnings」に変更してみました。違いはありませんでした。
カスタム $SIG{__DIE__} 関数を無効にしようとしました。違いはありませんでした。(もちろん、エラーが発生した場所だけですが、生成されたエラーは同じでした。)
冒頭のディスカッション リンクによると、MaxRequestsPerChild はずっと 0 であり、ThreadsPerChild 1 を試しましたが、違いはありませんでした。MaxRequestsPerChild を 1 にしてみました。これにより、この質問の奇妙な動作が解決されますが、リクエストごとに Web サーバーが再起動されます。
ページが最初に表示されたときに実行される大量のコードがあるため、これは良い解決策ではありません。
また、議論によると、私は httpd をサービスとして実行しているので、サービス パラメーター ウィンドウに -X を追加して [開始] をクリックしましたが、3 分後に完全に開始しようとしていました (通常は 3 秒以内に開始します)。メッセージ。タスク マネージャーでプロセスを強制終了し、Web ブラウザーからページにアクセスできないことを確認しました。コマンドラインから httpd -X を開始しました。この質問の上部と同じ動作です。また、httpd -? を実行したときに -X がリストされていないのも奇妙に感じました。もしかしたら、win32 MPM では利用できないのでしょうか?
そのスレッドで、David は次のように述べています。
この種の問題をトラブルシューティングした私の経験では、アンロードされたパッケージが、リロードされたモジュールのパッケージ スペースに格納された値 (おそらく BEGIN ブロック時に設定された) を削除し、その後の require が復元しなかった可能性が高いことが示されました。
しかし、これは私のコードには当てはまりません。私が紹介する「スクリプトを壊す」というエラーは、既に存在する行の上に余分な「my $var」行を追加するだけなので、2 番目の行は既に宣言されていると不平を言います。
リロードのたびに Web サーバーを再起動せずに mod_perl2 モジュールで作業する方法はありませんか?
perl - mod_perl2 と Apache Bucket Brigades を使用するにはどうすればよいですか?
私は、その場で Web ページのプロキシとリライトを行うアプリケーションを作成しており、mod_perl2 を使用することにかなり落ち着いています。mod_perl2 には、APR::Brigades と APR::Buckets というアイデアがあります。私の漠然とした理解では、これらは、私が必要とするフィルタリングと書き換えを行う効率的な方法です。しかし、これらのモジュールの Perldoc ページ以外は何も見つからないので、それらをどのように利用するかはまったくわかりません。
mod_perl2 Bucket Brigades について説明したり、チュートリアルを紹介したり、mod_perl2 を使用するオープンソースのアプリを教えてもらえますか?
safari - Safari ブラウザでエラー 401 ページが表示されない
私は Apache 2 を使用しており、httpd.conf にカスタム 401 ページがあります。
保護されたリソースにアクセスすると、すべてのブラウザーで基本的な http 認証ダイアログが表示されます。「キャンセル」をクリックすると、Safari (v3 および v4) 以外のすべてのブラウザーでカスタム 401 ページが表示されます。Safari は現在のページを表示するだけです。
Apache 構成や mod_perl ハンドラを使用して Safari に 401 ページを表示させる方法はありますか?