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