Domanda

Abbiamo una configurazione in cui la maggior parte del codice, prima di essere promosso alla piena produzione, è distribuito in modalità BETA - significato, che gira in ambiente di piena produzione (utilizzando database di produzione - di solito dati di produzione; e web server di produzione). Chiamiamo che il test fase BETA.

Uno dei requisiti principali è che il codice BETA promozione alla produzione deve essere un semplice "cp" comando dalla beta alla directory di produzione -. Nessun codice / nome del file cambia

Per i non-web codice Perl, ottenendo beta test senza soluzione di continuità è abbastanza fattibile ( vedi i dettagli qui ):

  • programmi Perl vivono in una posizione normale sotto radice di produzione (/usr/code/scripts) con moduli di produzione perl che vivono sotto la stessa radice (/usr/code/lib/perl)
  • Il codice BETA ha percorsi di codice 100% stessi tranne che in radice beta (/usr/code/beta/)
  • Un modulo speciale manipola @INC di qualsiasi script a seconda che lo script è stato chiamato da /usr/code/scripts o /usr/code/test/scripts, per includere librerie beta per gli script beta.

Questa messa a punto funziona benissimo fino ad dobbiamo beta testare la nostra web codice Perl (la configurazione è Embperl e Apache / mod_perl).

Il riaggancio è il seguente: se sia un modulo Perl produzione e modulo Perl BETA hanno lo stesso nome (es /usr/code/lib/perl/MyLib1.pm e /usr/code/beta/lib/perl/MyLib1.pm), allora mod_perl sarà in grado di caricare uno di questi moduli nella memoria -. e non c'è modo siamo al corrente per una particolare pagina web di influenzare quale versione del modulo attualmente caricato a causa di problemi di concorrenza

Lasciando da parte la soluzione non-programmazione ovvia (ottenere un server web BETA sanguinosa), che per ragioni politiche / organizzative non è fattibile, c'è un modo possiamo in qualche modo incidere a questo problema sia in Perl o mod_perl?

Ho suonato in giro con i vari approcci per lo scarico moduli Perl che %INC ha elencato, ma il problema rimane che un altro utente potrebbe caricare una pagina beta appena alla destra (o piuttosto sbagliato) momento e avere il modulo beta caricato che saranno utilizzati per la mia pagina di produzione.

È stato utile?

Soluzione

Utilizzando mod_perl 2.0 è possibile utilizzare PerlOptions + principale per creare un pool interprete Perl separato per ogni vhost. Vi costerà memoria aggiuntiva, ovviamente, ma funzionerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top