Sviluppo di sviluppo, fase e produzione per i siti WordPress?


41

Quindi devo essere in grado di avere iterazioni di sviluppo / fase / produzione (su server separati) per un sito Web WordPress, di solito uso git ma questo ovviamente non funzionerà con i siti WordPress a causa della dipendenza dal database per il principale configurazione di ... beh, quasi tutto.

Quindi la mia domanda è: come lo fate ragazzi? Ho avuto un rapido Google e ho visto che c'erano alcuni plugin, è questo l'unico modo? Quali svolgono meglio il lavoro in termini di facilità d'uso, velocità, affidabilità, interfaccia utente, ecc.?


pantheon.io ha dev, test e live per un singolo dominio. Usano git per i file e trasferiscono il database tra loro con un solo clic. È gratuito da provare e paghi solo quando vai "in diretta" - youtube.com/watch?v=KpGTDeqwgX4
jgraup

Risposte:


27

Ho un setup di cui sono abbastanza orgoglioso e funziona molto bene per il mio team.

Struttura generale

Tengo l'intera installazione sotto git. Tutte le modifiche, sia esso un aggiornamento del sistema, l'aggiunta / l'aggiornamento di un plug-in, l'aggiunta / l'aggiornamento di un tema, passano attraverso lo stesso flusso di lavoro. Le modifiche possono essere ripristinate in qualsiasi momento. Ho un server di distribuzione (un vecchio desktop P4) che esegue gitosis ma puoi usare github o gitolite con la stessa facilità . In git, ho due rami "speciali" mastere develop(spiegato più sotto). I miei server di produzione e gestione temporanea sono basati su cloud.

Ambienti di sviluppo

Ogni sviluppatore esegue il proprio server di sviluppo sul proprio computer. In termini di database, la necessità di dati live non è quasi mai stata un problema. Utilizziamo principalmente i dati di test dell'unità tematica . Altrimenti l'esportazione e l'importazione coprono la maggior parte delle cose. Se l'elemento DB era cruciale, è possibile impostare la replica o impostare qualcosa per la sincronizzazione su richiesta. Quando ho inizialmente impostato questa struttura, ho pensato che sarebbe stato cruciale, quindi ho iniziato a scrivere una serie di strumenti per farlo, ma con mia sorpresa non erano davvero necessari. (nota: dal momento che non erano necessari, non li ho mai ripuliti, quindi ci sono dei bug, ad esempio sostituirà il dominio nei dati serializzati).

Ambiente di gestione temporanea

Quando i commit vengono trasferiti dalla developfiliale alla gitosi, vengono automaticamente distribuiti sul nostro server di gestione temporanea. Il database di gestione temporanea è uno slave del database di produzione.

Ambiente di produzione

Quando i commit vengono spinti alla gitosi sul masterramo, viene automaticamente distribuito sul server di produzione.

Il problema di wp-config.php

Vuoi wp-config.phpessere unico da server a server, ma vuoi anche mantenerlo sotto il controllo della versione. La mia soluzione era quella di utilizzare .gitignoreper ignorare wp-config.phpe archiviare le versioni di gestione temporanea e di produzione come file con nomi diversi. Quindi su ogni server, ho symlink ad es wp-config.php -> wp-config-production.php. Ogni utente mantiene quindi il proprio DB con le proprie credenziali, con le proprie impostazioni (non tracciate) di wp-config.php.

Altre note

Uso Rackspace Cloud , che è fenomenale e poco costoso. Con esso posso mantenere identici i miei server di gestione temporanea e di produzione. Sto anche scrivendo plugin in questo momento che usano la loro API per permettermi di controllare i miei servizi direttamente da WordPress, è meraviglioso.

Le directory della cache, le directory di caricamento dei file, ecc., Vengono tutte aggiunte a .gitignore. Se lo desideri, puoi impostare un'attività cron per controllare regolarmente i caricamenti e portarli alla gitosi, ma non mi è mai sembrato necessario.

La struttura master / sviluppo è destinata a imitare parzialmente il modello di ramificazione di Vincent Driessen . Uso anche la sua estensione git git-flow e lo consiglio vivamente.

Ho avuto circa 10 sviluppatori che lavorano su questa struttura da oltre un anno ed è stato un sogno con cui lavorare. Affidabile, sicuro, veloce, funzionale e agile, non puoi chiedere di più!


Sto per configurare un'installazione di wp in un modo simile (ma usiamo svn) e volevo confermare il processo per l'aggiornamento di plug-in e wp: completare l'aggiornamento e controllare dev, eseguire il commit delle modifiche, distribuirle in fase di gestione temporanea, controllare, dipendere dal vivo. In sintesi, non si esegue mai un aggiornamento dell'installazione wp sul server live apportando le modifiche tramite gli aggiornamenti nel repository?
paullb,

1
Che dire delle modifiche al DB effettuate dalla routine di aggiornamento. Come vengono effettuati quelli nel DB di produzione?
paullb

Quel flusso di lavoro è corretto @paullb e non devi preoccuparti degli aggiornamenti del DB. Come funziona WordPress, gli aggiornamenti vengono attivati ​​dopo che la modifica è stata rilevata, quindi funziona esattamente allo stesso modo in cui funziona un aggiornamento manuale (al core o a un plugin)!
Matthew Boynes,

@MatthewBoynes, ciao. stai ancora usando questo worklow per il tuo sviluppo? in tal caso, applicherò questo flusso di lavoro al mio progetto. grazie :)
khakiout,

Non lo so, ma solo perché non è applicabile ai progetti su cui attualmente sto lavorando, che sono principalmente ospitati su WordPress.com VIP. Se fosse applicabile, lo userei comunque (e in effetti, la società per cui ho lavorato in precedenza continua a usarlo).
Matthew Boynes,

4

Innanzitutto, penso che sia importante considerare quello che stai per controllare la versione. Consiglierei di non mettere l'intera directory WP in VC. Penso che abbia più senso mettere wp-content / themes / YourThemeName sotto VC. Per un sito di grandi dimensioni con un numero elevato di plug-in complessi, ho potuto vedere il caso di includere anche wp-content / plugins. Se fosse assolutamente necessario, potresti includere wp-content / uploads. Le risposte seguenti cambieranno un po ', a seconda di cosa controlli la versione.

Detto questo, ecco quello che uso:

Locale: imposta uno stack LAMP sul tuo computer. Usa lo stesso URL del tuo sito di sviluppo. Utilizzare le voci di file VirtualHosts e .host per simulare l'ambiente di sviluppo da un punto di vista URL. Se stai solo modificando il tuo tema, considera l'utilizzo di SSHFS per collegarti a wp-content / plugins, wp-content / uploads. Prendi in considerazione l'utilizzo del database sulla tua installazione di sviluppo del progetto a meno che tu non stia davvero facendo un duro lavoro.

Sviluppo: verifica una copia funzionante di Repo nel tuo ambiente WP. Configurare un hook POST-COMMIT in SVN per aggiornare questo repository su ogni commit. Questo lo manterrà sincronizzato. (Consideralo la continua integrazione di un uomo povero.)

Produzione: controlla un tag della versione con nome che rappresenta un candidato finale. Quando è necessario utilizzare una nuova versione, cambiare il tag e aggiornare il repository.


Un ambiente di sviluppo è molto adatto per testare build notturne e git wordpress viene aggiornato automaticamente ogni 30 minuti, oltre a essere decentralizzato e funzionare meglio per i team, non conosco nessuno che è passato a git / hg che è tornato usando svn.
Wyck,

1
Solo curioso di sapere come ragionare per non mettere l'intera directory WP sotto il controllo della versione. Sembra un collo di bottiglia nel flusso di lavoro. Mettere WP nel repository dà a tutti gli sviluppatori la stessa base di codice e la stessa versione di WP. Consente inoltre la coerenza tra gli ambienti. Vedi il link di Wyck (sulla sua risposta) ai file condizionali di wp-config.
Brian Fegter,

2

Recentemente abbiamo scoperto la RAMP . Nota: questa è solo una parte dell'intero processo, ma la sincronizzazione dei database del contenuto tra server è probabilmente la parte più difficile.


2

Lo faccio con git e mercurial, assicurati solo di usare un repository privato.

Opzione 1.

L'unico problema è il config.php, che puoi dire a git di ignorare su push o prima di init.

Usa .gitignoreo git update-index --assume-unchanged config.php(leggi un po 'sul comando assunto invariato prima di usarlo)

Opzioni 2.

Usa un condizionale in config.php che controlla l'URL e applica le credenziali corrette, sulla falsariga di "if server url = dev quindi usa le credenziali A, altrimenti usa le credenziali B", ecc.

Mark lo spiega meglio, http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

ps. È inoltre possibile server i file direttamente da un repository remoto invece di disporre di un "file server" tradizionale. (video davvero noioso che ho realizzato su questo http://www.youtube.com/watch?v=8ZEiFi4thDI )

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.