Como posso testar os módulos Web Perl no Apache/mod_perl no servidor da Web de produção?
-
21-09-2019 - |
Pergunta
Temos uma configuração em que a maioria dos códigos, antes de ser promovida à produção completa, é implantada no modo beta - significando, ele é executado em um ambiente de produção completo (usando o banco de dados de produção - geralmente dados de produção; e servidor da web de produção). Chamamos esse teste beta de estágio.
Um dos principais requisitos é que a promoção do código beta para a produção deve ser um comando "CP" simples da versão beta para o diretório de produção - sem alterações de código/nome do arquivo.
Para o código Perl não-Web, alcançar o teste beta contínuo é bastante factível (Veja detalhes aqui):
- Os programas PERL vivem em um local padrão em Raiz de produção (
/usr/code/scripts
) com módulos Perl de produção vivendo sob a mesma raiz (/usr/code/lib/perl
) - O código beta tem 100% dos mesmos caminhos de código, exceto em Beta Root (
/usr/code/beta/
) - Um módulo especial manipula
@INC
de qualquer script com base em se o script foi chamado de/usr/code/scripts
ou/usr/code/test/scripts
, para incluir bibliotecas beta para scripts beta.
Essa configuração funciona bem até que precisemos testar beta nosso código Perl (a configuração é EmbPERL e Apache/mod_perl).
O desligamento é o seguinte: Se um módulo Perl de produção e o módulo beta perl têm o mesmo nome (por exemplo, /usr/code/lib/perl/MyLib1.pm
e /usr/code/beta/lib/perl/MyLib1.pm
), então mod_perl só poderá carregar um desses módulos na memória - E não há como conhecermos uma página da web específica para afetar qual versão do módulo está atualmente carregada devido a problemas de simultaneidade.
Deixando de lado a solução óbvia de não programação (obtenha um servidor beta sangrento da Web) que, por razões políticas/organizacionais, não é viável, existe alguma maneira de que possamos de alguma forma invadir esse problema em Perl ou Mod_perl?
Eu brinquei com várias abordagens para descarregar módulos perl que %INC
Listou, mas o problema permanece de que outro usuário pode carregar uma página beta no momento certo (ou melhor, errado) e ter o módulo beta carregado que será usado para minha página de produção.
Solução
Usando mod_perl 2.0 você pode usar Perloptions +pai Para criar um conjunto separado de intérprete Perl para cada VHost. Isso custará uma memória extra, é claro, mas funcionará.