2009-03-14 15 views
11

Ho un sito in esecuzione su Django, (ma la domanda vale per qualsiasi cosa, php, ecc)Dovrei usare git per installare siti Web?

Attualmente sto usando unison per distribuire i miei cambiamenti, ed io (kinda usato per) lo amano perché prima che io lo stavo facendo manualmente !!

Ora, mentre mi sto bagnando i piedi con il git, sto iniziando ad amarlo! E sto pensando se forse dovrei usarlo invece di unisono per distribuire le mie modifiche!

In questo modo avrò il vantaggio di essere in grado di ripristinare le mie modifiche se in qualche modo la distribuzione si rivelasse un disastro!

La domanda è:

  • È git adatto per la distribuzione siti web?

  • Eventuali cose/problemi/trucchi che dovrei essere a conoscenza?

risposta

16

Io uso git per monitorare il mio sito, e mi distribuire in questo modo:

git archive --format=tar --prefix="homepage/" master | gzip | ssh webserver "tar xvz -C ~/public_html" 

Questo merita una piccola spiegazione.Il comando di archiviazione per git esporterà i file per il ramo master, che viene compresso con gzip per ridurre al minimo il traffico di rete. È ricevuto in remoto tramite ssh, che viene decompresso nella directory di destinazione finale.

Lo script di distribuzione che utilizzo ha un po 'di più in corso, ma questo è il pezzo più importante.

+0

Come si fa a organizzare i file da rimuovere dal server? Can 'rsync' può prendere input in stile tar? – mjs

+0

Ad ogni distribuzione, viene creata una nuova directory con versione e collegata a symlink, che rende più semplice il ripristino. È qui che entra in gioco la parte "ha ancora un po 'di più". –

+0

Finora utilizzo anche l'unisono. Questo ha il vantaggio, che le modifiche su entrambi i lati vengono sincronizzate automaticamente (tranne che lo stesso file è stato modificato su entrambi i lati). Voglio passare alla distribuzione git anche sul server. Ma non così. Un checkout git viene eseguito sul server. Il codice viene aggiornato da Git Pull. – guettli

5

Bene, io uso SVN per distribuire il mio sito Web, quindi direi di provarlo! Tieni presente che potresti dover riavviare/ricaricare il server ogni volta che aggiorni il codice per il sito web (non sono sicuro che Django o qualsiasi altra cosa tu stia eseguendo sia in grado di ovviare a questo).

+0

Per riferimento: non è direttamente Django che regola se il server deve essere ricaricato, ma il bridge server-python. Nella configurazione Apache-w/-modpython, le modifiche al codice python richiedono un riavvio di apache, le modifiche ai template (o file statici) no. Le modifiche all'ORM richiedono molto di più. –

+0

L'importatore personalizzato di mod_python può ricaricare il codice Python modificato senza il riavvio del server, ma in genere riavvio comunque per sicurezza. –

9

Se la domanda è se è possibile utilizzare git per distribuire l'applicazione django, la risposta è certa!

Tuttavia, l'implementazione della produzione di un'applicazione popolare può diventare complessa e andare ben oltre il semplice ripristino dei file. Potrebbe essere necessario eseguire gli script DB (sia gli script di aggiornamento che quelli di downgrade), riavviare i lavori cron o spostare i file.

Come parte del processo di distribuzione, è possibile eseguire il backup completo del codice di base in modo che sia possibile eseguire il rollback di qualsiasi numero di versioni.

Un modo per farlo è con Capistrano che automatizza l'intero processo di distribuzione per voi. Si creano script nell'ambiente di sviluppo e si eseguono comandi come: cap deploy, cap deploy_with_migrations, cap rollback, ecc. E tutto è automatizzato dal login fino al processo di backup e all'esecuzione degli script DB. Con la distribuzione automatizzata si eliminano gli errori nell'ambiente di produzione. Recentemente ho parlato con un'organizzazione che ha cancellato accidentalmente l'intero database mentre si trovava nel mezzo di un'implementazione e aveva bisogno di ripristinare tutto dai backup. Gli errori di distribuzione possono davvero rovinare la tua attività, quindi desideri automatizzarla se sei seriamente intenzionata a farlo.

Sebbene Capistrano sia uno strumento di distribuzione basato su Ruby comunemente utilizzato con Rails, è agnostico in termini di capacità di automazione. Ci sono numerosi post su Internet che illustrano i vantaggi della distribuzione di app Django con Capistrano (google - django capistrano).

È inoltre possibile controllare check out this link here

+0

Penso che tu stia finendo per complicare questo .. La domanda non menziona mai nulla che assomigli a siti web aziendali popolari/complessi .. ma, capistrano è un buon suggerimento – dbr