Domanda

Ho lavorato all'interno di una società di sviluppo web, dove abbiamo avuto il nostro locale macchine, un server di gestione temporanea e un certo numero di server di produzione.Abbiamo lavorato su mac in perl e utilizzato svn commit al palco, e gli script perl di carico per i server di produzione.Ora sto lavorando a un mio progetto e vorrei trovare delle buone pratiche per lo sviluppo web quando si utilizza web hosting condiviso e non funziona da un ambiente unix (con tutta la magia che ho potuto fare con perl / bash scripting / cron jobs, ecc)

Quindi la mia domanda è: date le mie condizioni, che sono:

  • Sto usando un unico standard condiviso web hosting da un provider esterno (con accesso ssh)
  • Sto lavorando con almeno un altra persona e destinati ad uso di SVN per il controllo del codice sorgente
  • Io sto in via di sviluppo php/mysql sotto Windows (ma usando linux è una possibilità)

Programma di installazione ti suggeriscono per il test, la distribuzione, la migrazione di codice/dati?Ho un server xampp installato sulla mia macchina locale, ma non era sicuro che metodi utilizzare per eseguire la migrazione dei dati, ecc in windows.

È stato utile?

Soluzione

Ho un po ' di PHP personale, progetti di hosting condiviso ;qui ci sono un paio di pensieri, da quello che sto facendo su una di quelle (quello che è il più attivo, e necessita di almeno alcune semi-automatica di sincronizzazione modo) :

Poche parole sul mio setup :

  • Qualche tempo fa, avevo tutto su SVN ;ora, sto usando bazar ;ma l'idea è esattamente la stessa (ad eccezione, con bazaar, ho la storia locale e tutto ciò che)
  • Ho un accesso ssh al server di produzione, come si fa
  • Io lavoro su Linux esclusivamente (così, quello che faccio io potrebbe non essere così facile con windows)

Ora, Come io lavoro :

  • Tutto ciò che ha di te essere sul server di produzione (codice sorgente, immagini, ...) si impegna a SVN/bazarr/qualunque cosa
  • Io lavoro in locale con Apache/PHP/MySQL (Io uso un dump del DB di produzione che posso importare in locale una volta in un po')
  • Io sono l'unico che lavorano sul progetto ;sarebbe probabilmente essere OK per un piccolo team di 2/3 sviluppatori, ma non di più.

Quello che ho fatto prima :

  • Ho avuto un po ' di PHP script per controllare il server SVN per la modifica tra "ultima revisione spinto alla produzione" e la TESTA
    • Sto indovinando questo fatti in casa script PHP sembra lo script Perl attualmente usng ^^
  • Che script costruito una lista di cartelle/file da caricare per la produzione di
  • E quelli caricati via FTP
  • Questa non è stata molto soddisfacente (c'erano bug nel mio script, suppongo ;Non ho mai preso il tempo per correggere quelle) ;e mi ha costretto a ricordare il numero di revisione del tempo ultima volta che l'ho spinto per la produzione di (beh, è stato automaticamente memorizzati in un file di script, in modo da non difficile ^^ )

Quello che faccio ora :

  • Quando si passa al bazar, non ho voglia di riscrivere il copione, che non ha funzionato molto bene comunque
  • Ho eliminato lo script totalmente
  • Come ho accesso ssh al server di produzione, uso rsync per la sincronizzazione da mia macchina di sviluppo per il server di produzione, quando ciò che ho in locale è considerato stabile/pronto per la produzione.

Un paio di note su quel modo di fare le cose :

  • Non ho un server di gestione temporanea :il mio setup locale è abbastanza vicino per la produzione di una
  • Non avendo un server di gestione temporanea è OK per un progetto semplice con uno o due sviluppatori
  • Se avessi un server di gestione temporanea, probabilmente sarei andare con :
    • fare un "svn update" su di esso quando si desidera mettere in scena
    • quando è OK, lancio il comando rsync da server di gestione temporanea (che si laurea presso l'ultima "stabile" di revisione, quindi su OK per essere spinto alla produzione)
  • Con un progetto più grande, con più sviluppatori, io probabilmente non andare con che tipo di installazione ;ma mi trovo abbastanza bene per un (non troppo grandi) eventuale progetto.


L'unica cosa di "speciale", che potrebbe essere "linux-oriented" è usando rsync ;una rapida ricerca sembra indicare che c'è un rsync eseguibile che può essere installato su windows : http://www.itefix.no/i2/node/10650

Non l'ho mai provato, però.


Come nota a margine, ecco ciò che il mio comando rsync, assomiglia a questo :

rsync --checksum \
    --ignore-times \
    --human-readable \
    --progress \
    --itemize-changes \
    --archive \
    --recursive \
    --update \
    --verbose \
    --executability \
    --delay-updates \
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \
    /LOCAL_PATH/ \
    USER@HOST:/REMOTE_PATH/

Io sto usando le chiavi pubbliche/private meccanismo, in modo da rsync non chiedere una password, btw.

E, naturalmente, io di solito uso lo stesso comando in "dry-run" modalità di prima, per vedere che cosa sta andando essere synchorised, con l'opzione "--dry-run"

E il ignore-rsync.txt contiene un elenco di file che non voglio essere spinto per la produzione di :

.svn
cache/cbfeed/*
cache/cbtpl/*
cache/dcstaticcache/*
cache/delicious.cache.html
cache/versions/*

Qui, io, solo per evitare che le directory della cache di essere spinto per la produzione -- sembra logico non mandare coloro che, come i dati di produzione non è la stessa come i dati di sviluppo.

(Sto solo notando che c'è ancora il ".svn"in questo file...Ho potuto rimuovere, come io non uso SVN più per il progetto ^^ )


Spero che questo aiuta un po'...

Altri suggerimenti

Per quanto riguarda SVN, vorrei suggerire di andare con una serie SVN dedicato come pianta di fagioli o di utilizzare la stessa macchina server per eseguire un server SVN in modo che entrambi gli sviluppatori possono lavorare fuori di esso.

In quest'ultimo caso, il vostro script di distribuzione sarebbe semplicemente spostare i bit in una cartella di gestione temporanea web (accessibile tramite beta.mysite.com) e poi un altro script di distribuzione potrebbe muoversi che per la directory web dal vivo. Distribuzione direttamente al sito dal vivo non è ovviamente una buona idea.

Se si decide di andare con un server dedicato o desidera distribuire dalla vostra macchina al server, usare rsync. Questa è anche la mia messa a punto corrente. RSync fa sincronizza differenziali (su SSH), quindi è veloce ed è stato costruito proprio per questo genere di cose.

Come si cresce si può iniziare a utilizzare costruire utensili con unit test e quant'altro. Questo lascia solo il problema di sincronizzazione dei dati.

I soli dati di sincronizzazione da remoto -> locale e utilizzare un file batch DOS che fa questo su SSH utilizzando mysqldump . Cygwin è utile per le macchine Windows, ma si può saltare. Lo script di importazione SQL gestisce anche una query una riga per aggiornare alcune cellule, come hostname e radice web per la distribuzione locale.

Una volta che hai questa configurazione, è possibile concentrarsi su solo la scrittura di codice e la distribuzione remota o la sincronizzazione locale e deployement diventa un processo solo clic.

Una possibilità è quella di utilizzare un framework dedicato per l'attività. Capistrano si adatta molto bene con linguaggi di scripting come PHP. Si basa su Ruby, ma se fate una ricerca, si dovrebbe essere in grado di trovare le istruzioni su come utilizzarlo per la distribuzione di applicazioni PHP.

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