Come può moduli Perl I beta test Web sotto Apache / mod_perl sul web server di produzione?
-
21-09-2019 - |
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.
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à.