運用 Web サーバー上の Apache/mod_perl で Web Perl モジュールをベータ テストするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2474734

質問

完全な運用環境に昇格する前に、ほとんどのコードがベータ モードでデプロイされるセットアップがあります。つまり、完全な運用環境で実行されます (運用データベース (通常は運用データ) を使用します)。実稼働 Web サーバー)。この段階をベータテストと呼びます。

主な要件の 1 つは、ベータ版コードを実稼働環境に昇格するには、ベータ版から実稼働ディレクトリーへの単純な「cp」コマンドを実行する必要があることです。コードやファイル名は変更されません。

非 Web Perl コードの場合、シームレスなベータ テストを達成することは十分に可能です (詳細はこちらをご覧ください):

  • Perl プログラムは、実稼働ルート (/usr/code/scripts) 同じルート (/usr/code/lib/perl)
  • ベータ コードには、ベータ ルート (/usr/code/beta/)
  • 特別なモジュールが操作します @INC スクリプトがどこから呼び出されたかに基づいてスクリプトを評価します。 /usr/code/scripts または /usr/code/test/scripts, 、ベータ スクリプト用のベータ ライブラリを含めます。

この設定は、Web Perl コードのベータ テストが必要になるまでは正常に機能します (設定は EmbPerl と Apache/mod_perl です)。

ハングアップは次のとおりです。 製品版 Perl モジュールとベータ版 Perl モジュールの両方が同じ名前を持つ場合 (例: /usr/code/lib/perl/MyLib1.pm そして /usr/code/beta/lib/perl/MyLib1.pm)、その場合、mod_perl はこれらのモジュールのうち 1 つだけをメモリにロードできます。 - そして、同時実行の問題により、特定の Web ページが現在ロードされているモジュールのバージョンに影響を与えることを私たちが認識する方法はありません。

政治的/組織的な理由から実現不可能である明らかな非プログラミングの解決策 (血まみれのベータ版 Web サーバーを入手する) はさておき、Perl または mod_perl のいずれかでこの問題を回避できる方法はあるでしょうか?

Perl モジュールをアンロードするためのさまざまなアプローチを試してみました。 %INC がリストされていますが、別のユーザーがちょうど良い (またはむしろ間違った) 瞬間にベータ ページをロードし、私の運用ページで使用されるベータ モジュールがロードされる可能性があるという問題が残ります。

役に立ちましたか?

解決

は、使用することができますmod_perlの2.0を使用して PerlOptions +親各バーチャルホストに対して個別のPerlインタープリタプールを作成します。それはもちろん、あなたに余分なメモリの費用がかかりますが、それは動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top