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.

Foi útil?

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á.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top