Domanda

Usiamo l'ExpressionEngine CMS (PHP) per creare siti web. Per ogni sito, abbiamo istituito un repository subversion e commettiamo l'installazione EE nonché degli eventuali modelli personalizzati, immagini, JavaScript, ecc che vengono utilizzati. Incluso nel repository è il file che contiene tutte le variabili di ambiente e il file .htaccess.

Abbiamo un server di sviluppo con una copia di lavoro del repository aggiornato via post-commit che usiamo per sviluppare. Quando siamo pronti a rilasciare creiamo una filiale in Subversion, apportare le modifiche necessarie per l'ambiente di produzione, contrassegnare il numero di release, esportare il repository, caricarlo in una nuova directory sul server di vivere, e link simbolico i file in posizione. Un rollback è semplice come un collegamento simbolico di nuovo alla versione precedente.

Il problema è che passo in cui dobbiamo modificare le variabili di ambiente che devono essere diverso per i server dev e di produzione. Questa è roba del genere (ONU) commentando regole htaccess che reindirizzare i posti sbagliati, sostituendo google chiavi mappa API perché i domini sono diversi, l'esecuzione di script che riducono al minimo il javascript in un unico offuscato file per mantenere i collegamenti di dimensione e HTTP verso il basso, ecc .

La domanda è: come potrebbe essere più automatizzato? Ci piacerebbe ottenere la procedura di rilascio fino al minimo indispensabile. Ho familiarità con l'esistenza di strumenti come Capistrano e fare, ma io non sono sicuro di come avrei potuto ottenere loro di modificare tutti i file necessari ... come si dovrebbe organizzare una cosa del genere? È questa volta vale la pena spendere automatizzando quando capita forse una volta ogni paio di settimane?

È stato utile?

Soluzione

Un sacco di opzioni di configurazione potrebbe essere affrontato accendendo $ _SERVER [ 'HTTP_HOST'].

Ad esempio

switch ($_SERVER['HTTP_HOST']) {
    case 'developement.domain.com':
        $api_key = "dev environment api key";
        break;
    default:
        $api_key = "live environment api key";
}

Poi, per questioni di .htaccess è possibile impostare un file .htaccess alternativo nella definizione vhost utilizzando la direttiva AccessFileName:

<VirtualHost *:80>
    ServerName sitename
    AccessFileName .htaccess-dev
</VirtualHost>

Altri suggerimenti

mi occupo di questo problema con l'aggiunta di file di configurazione per Subversion lista da ignorare . E 'stato già affrontato qui su StackOverflow: vedere la domanda # 149.485

In sostanza, tengo solo setup.default.php in SVN, e in ogni installazione che copiare manualmente a setup.php che si trova sulla lista ignora. Questo impedisce che il file da controllare nuovamente a repo. Raramente ci sono modifiche a questo file e può essere gestito come si verifica il requisito.

Un'altra alternativa è quella di diramare i file di configurazione, una volta, in un ramo di release, e poi segnare come modificata dalla destinazione, e quindi utilizzare uno script di unione che ricorda come fare una fusione a tre vie. Se le modifiche di configurazione sulla sorgente, allora sarà probabilmente genererà un conflitto, che è una buona cosa, perché probabilmente è necessario fare simili cambiamenti nella destinazione.

In questo modo, si tiene due alberi che vanno per la durata del progetto: lo sviluppo e il rilascio. Come le cose maturano in fase di sviluppo, li integrare oltre a rilasciare. Si può avere un terzo, QA, albero e, se si dispone di un processo di rilascio più coinvolti.

Quando si tira una nuova release, si copia dalla zona di lavoro alla zona di "rilascio" (come una fusione / integrazione), piuttosto che tirare una nuova filiale di zecca. Se anche voi volete un'istantanea-in-time di un albero di rilascio, a quel punto, poi fare un / copia / tag ramo separato che si usa solo per scopi di archiviazione.

A proposito:. Questo è uno dei settori in cui brilla Perforce - si ricorda quello che già dalla fusione, e non potrà mai tentare di unire due volte

Ci occupiamo di questo, mantenendo una directory specifica-config.

Così, per esempio se si dispone di .htaccess diverso e file config.php tra dev e la produzione sarebbero stati mantenuti in / trunk / config / {ambiente} /

utilizzare gli script / Nant formica per creare pacchetti di rilascio, e gli script hanno un compito di costruzione per ogni ambiente. Tali compiti raccogliere i file specifici di configurazione.

-

Un altro commentatore suggerisce per accendere HTTP_POST. Purtroppo non posso commentare direttamente (non un alto rappresentante abbastanza). Utilizzando HTTP_POST per determinare la configurazione dell'ambiente ha potenziali problemi di sicurezza in quanto il valore di questo viene dal client.

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