2

完全な本番環境に昇格する前に、ほとんどのコードがベータ モードで展開されるセットアップがあります。つまり、完全な本番環境で実行されます (本番データベース - 通常は本番データと本番 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たが、別のユーザーがちょうどいいタイミングで (またはむしろ間違った) ベータ ページをロードし、本番ページに使用されるベータ モジュールがロードされる可能性があるという問題が残っています。 .

4

1 に答える 1

3

mod_perl 2.0 を使用すると、 PerlOptions +Parentを使用して、仮想ホストごとに個別の Perl インタープリター プールを作成できます。もちろん、追加のメモリが必要になりますが、動作します。

于 2010-03-19T03:26:22.877 に答える