問題タブ [mod-perl]
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 - アクティブ状態の Perl - IOCP
ネットワーク関連のコードの 1 つで、perl の IOCP を使用することを考えています。現在アクティブな状態の Perl は 5.10 まではこの機能を提供していませんか? perl で IOCP のような ASIO 機能を使用するための無料のモジュールを知っている人はいますか?
-カーシック
perl - 実稼働 Web サーバーの Apache/mod_perl で Web Perl モジュールのベータ テストを行うにはどうすればよいですか?
完全な本番環境に昇格する前に、ほとんどのコードがベータ モードで展開されるセットアップがあります。つまり、完全な本番環境で実行されます (本番データベース - 通常は本番データと本番 Web サーバーを使用)。その段階をベータテストと呼んでいます。
主な要件の 1 つは、BETA コードの製品版への昇格は、ベータ版から製品版のディレクトリへの単純な「cp」コマンドである必要があることです。コードやファイル名は変更されません。
Web 以外の Perl コードの場合、シームレスなベータ テストを達成することはかなり可能です (詳細はこちらを参照してください)。
- Perl プログラムは本番ルート (
/usr/code/scripts
) の下の標準的な場所にあり、本番 Perl モジュールは同じルート (/usr/code/lib/perl
)の下にあります。 - ベータ コードには、ベータ ルートの下を除いて 100% 同じコード パスがあります (
/usr/code/beta/
) - 特別なモジュールは、スクリプトがまたは
@INC
から呼び出されたかどうかに基づいてスクリプトを操作し、ベータ スクリプト用のベータ ライブラリを含めます。/usr/code/scripts
/usr/code/test/scripts
このセットアップは、Web Perl コードのベータ テストが必要になるまで問題なく機能します (セットアップは EmbPerl と Apache/mod_perl です)。
ハングアップは次のとおりです:実稼働 Perl モジュールと BETA Perl モジュールの両方が同じ名前 (たとえば/usr/code/lib/perl/MyLib1.pm
と/usr/code/beta/lib/perl/MyLib1.pm
) を持っている場合、mod_perl はこれらのモジュールの 1 つしかメモリにロードできません。同時実行の問題により、特定の Web ページが現在ロードされているモジュールのバージョンに影響を与える。
政治的/組織的な理由で実行できない明らかな非プログラミングの解決策 (血まみれの BETA Web サーバーを取得する) は別として、Perl または mod_perl でこの問題を回避する方法はありますか?
リストされているPerl モジュールをアンロードするためのさまざまな方法を試してみまし%INC
たが、別のユーザーがちょうどいいタイミングで (またはむしろ間違った) ベータ ページをロードし、本番ページに使用されるベータ モジュールがロードされる可能性があるという問題が残っています。 .
perl - mod_perlアプリケーションを通常のユーザーとして実行できますか
プレーンなバニラCGIアプリケーションをsuexecで実行するのと同じように、mod_perlアプリケーションを通常のユーザーとして実行できますか?
perl - DBI と mod_perl で DB2 への接続を使用するにはどうすればよいですか?
DBI の IBM DB2 ドライバーを mod_perl で動作させるのに問題があります。私のテストスクリプトは次のとおりです。
このスクリプトは CGI として機能しますが、mod_perl の下では機能しません。Apache のエラー ログに次のエラーが表示されます。
まず、なぜ ODBC を使用しているのですか。ネイティブ DB2 ドライバーがインストールされます (したがって、CGI として機能します)。
RHEL5 で Apache 2.2.3、mod_perl 2.0.4 を実行しています。
この男は私と同じ問題を抱えていました: http://www.mail-archive.com/dbi-users@perl.org/msg22909.html しかし、彼がどのように修正したかはわかりません。mod_php4 は mod_perl と何の関係がありますか?
どんな助けでも大歓迎です、私はグーグルで運がありません。
更新:
james2vegas が指摘したように、問題は PHP に関係しています。PHP をすべて無効にすると、別のエラーが発生します。
このエラーは、環境変数が正しく設定されていないことに関係していると思いますDB2INSTANCE
。ただし、この問題を解決するために PHP をオフにすることはできません (一部のレガシー アプリケーションでは PHP が必要です)。だから私は今2つの質問があります:
- PHP をすべて無効にせずに元の問題を解決するにはどうすればよいですか?
- 環境の問題を解決するにはどうすればよいですか?
SetEnv
とPerlSetEnv
inを使用して、DB2INSTANCE、DB2_PATH、および SQLLIB 変数を正しく設定しましhttpd.conf
たが、うまくいきませんでした。
注: コードを編集して、問題がグローバル変数の永続性に関係しているかどうかを判断しました。
perl - mod_perl メモリ リーク
最近、私たちのサイトの 1 つにメモリ リークがあることを発見しました。突然発生したため、非常に奇妙です。GTop を使用してプロセスごとのメモリ サイズを測定したところ、実際の値は (サーバー上で) 要求ごとに約 65 MB であり、さらに 5 MB が共有されていることがわかります。
mod_perl のパフォーマンス チューニングの記事に示されているように、startup.pl ファイルにモジュールをプリロードしてみました。実際に共有メモリが 3.7 MB まで減少した場合、何も起こりませんでした。この状況では、コード行が実行される前に、アプリケーションでメモリ リークが発生していると考えました。合計値が実際には 64 MB であることを確認するためだけにメモリを測定しました。私の質問は次のとおりです。プロセスごとにメモリのデフォルトの事前割り当てはありますか? 構成の問題はありますか? mod_perl でメモリ リークが発生していますか?
どうもありがとうございました。
perl - mod_perl の下で Perl を使用して「ジョブ」をテーリングする
このプロジェクトを mod_perl で実行すると、ホストに関する情報が表示されます。このページには、ユーザーがホストに ping/nslookup/traceroute できるようにするドロップダウン付きのテキスト ボックスがあります。出力は のようにテキスト ボックスに表示されますtail -f
。
CGIの下でうまく機能します。ユーザーが ping を要求すると、サーバーに対して AJAX 呼び出しが行われ、そこで基本的に ping が開始され、出力が一時ファイルに送られます。その後、ping が終了するまで出力が更新されるように、後続の ajax 呼び出しはファイルを「末尾」にします。ジョブが完了すると、一時ファイルは削除されます。
ただし、mod_perl の下では、何をしてもゾンビ プロセスの作成を停止できます。私はあらゆることを試しました。ダブル フォーク、使用IPC::Run
などです。最終的に、システム コールは mod_perl では推奨されません。
私の質問は、これを行うためのより良い方法があるのではないでしょうか? コマンド ライン ジョブを作成し、mod_perl で動作する出力をテーリングするための CPAN モジュールはありますか? 私はいくつかの提案を探しています。
詳細を通知して更新を取得する、ある種の「ジョブ」デーモンを作成できる可能性があることはわかっています。コマンドを実行し、ステータスなどを追跡します。しかし、もっと簡単な方法はありますか?
前もって感謝します。
perl - mod_perl での '\' の奇妙な動作
mod_perlで実行されるスクリプトには次のものがあります
ログファイルに次を出力します。
$1 は null であることがわかっています。これは mod_perl2 のバグですか、それとも私が見逃しているものですか?
perl - POSIX モジュールの問題
mod_perl サイトを Linux ホスティングから FreeBSD に移動した後、ログファイルに次のエラーが記録されました。
ベンダは、../../lib/POSIX.pm (../../lib/auto/POSIX/SigRt/_init.al に自動分割) 993 行で使用される POSIX マクロ SIGRTMIN を定義していません\n
スクリプトは POSIX をインポートするだけで、いくつかの機能 (ceil など) を利用します。
この問題を解決するにはどうすればよいですか?
perl - mod_perlはcgiとは異なる方法で包含パスを処理しますか?
私はperlで書かれ、CGIとして実行されるスクリプトを持っています。正常に動作します。最近、mod_perlモジュールをapacheにインストールし、PerlModule ModPerl::Registryディレクティブを使用しました。
これを使用して、cgiperlコードを変更する必要がないことを読みました。(私は常に厳密なプラグマを使用しているので、初期化されていないグローバル変数などについて心配する必要はありません)。
元のスクリプトは意図したとおりに機能しますが、require()関数に含めたファイルは解決できなくなります。
script.cgi:
script.perl
ディレクトリ構造は次のように機能します。
$ ls
script.cgiscript.perlには/が含まれます
$lsには/が含まれます
関数.cgifunctions.perl