Ho appena terminato un'app Django su cui desidero ottenere feedback da utenti esterni. Mi piacerebbe lanciare una versione e quindi biforcare una versione privata in modo da poter incorporare il feedback e aggiungere più funzionalità. Sto pianificando di fare molte piccole iterazioni di questo processo. Sono nuovo allo sviluppo web; come fanno tipicamente i siti web? Si tratta semplicemente di copiare la mia cartella di progetto Django in un'altra directory, avviare il server lì e continuare il mio lavoro di sviluppo nella directory originale? O preferirei utilizzare un sistema di controllo della versione? La mia intuizione è che è il secondo, ma se è così, sembra un argomento enorme con molti usi (ad esempio, collaborazione, che non si applica qui) e non so da dove iniziare.Come si esegue una versione di un'app Web mentre si sviluppa la versione successiva?
risposta
1) URL separati www.yoursite.com vs test.yoursite.com. puoi anche fare www.yoursite.com e www.yoursite.com/development, ecc. Puoi anche creare un/beta o/staging ..
2) Conservare database separati, uno per la produzione e uno per lo sviluppo. Scrivi uno script che copierà il tuo database live in un database di sviluppo. Mantiene un database per ogni tipo di sito che crei. (Puoi creare una beta o un database di staging per il tuo tester). Fai il tuo lavoro nel database di sviluppo. Se si modifica la struttura del database, salvare le modifiche come file .sql che può essere caricato ed eseguito nel database del sito attivo quando si attivano tali modifiche.
3) Unisci le funzionalità nei diversi siti con il controllo della versione. Attualmente sto giocando con una installazione di subversion per le app Web con stalla (trunk), una per staging e una per lo sviluppo. I tag di sviluppo e le filiali vengono uniti in staging, quindi i tag/rami di staging vengono uniti in stable. Il controllo della versione ti consente di gestire il codice sorgente nel modo che preferisci. Dovrai trovare una metodologia che funzioni per te e usarla.
4) Considerare l'automazione della creazione. Pubblicherà il tuo sito automaticamente. Dai un'occhiata a http://ant.apache.org/. Può guidare un sacco di controllo automatico del codice e caricarlo su ogni sito specifico come potrebbe essere necessario.
5) Giocattolo del mese: Esiste un'utilità chiamata cUrl che può risultare utile. Fa molto dalla riga di comando. Questo potrebbe andar bene se lo fai nel caso in cui tu non voglia usare tutti o alcuni di Ant.
Buona fortuna!
In genere si utilizza il controllo della versione e si hanno due domini: il proprio sito web e test.your-site.com. Quindi your-site.com aggiornerà sempre il trunk, che è l'ultima versione di spedizione corrente. Faresti il tuo sviluppo in un ramo del tronco e test.your-site.com aggiornerebbe a tale scopo. Quindi unisci periodicamente le modifiche dal ramo di sviluppo al trunk.
Quello che faccio è esportare una copia del mio repository SVN e mettere i file sul server di produzione live, quindi mantenere una macchina virtuale con una copia di lavoro di sviluppo e inviare le modifiche al repository quando ho finito.
Jas Panesar ha la migliore risposta se lo chiedi in termini di sviluppo, certamente. Cioè, se stai solo chiedendo come mantenere facilmente i tuoi nuovi sviluppi separati dal sito che è già in esecuzione. Tuttavia, se la tua domanda era in realtà chiedendo come eseguire entrambe le versioni simultaneamente, allora ecco i miei due centesimi.
L'installazione ha molto a che fare con questo, ma io consiglio sempre di eseguire web server basati sui processi in primo luogo.Cioè, non usare server thread (meno rilevanti per questa domanda) e non incorporare nel server web (cioè, non usando mod_python, che è la parte rilevante qui). Quindi, hai uno o più processi che ricevono richieste HTTP dal tuo server web (Apache, Nginx, Lighttpd, ecc.). Ora, quando vuoi provare qualcosa in diretta, senza intaccare il tuo normale sito in esecuzione, puoi far apparire un processo che serve richieste che non ricevono mai richieste regolari come ad altri. Cioè, gli utenti normali non lo vedono.
È possibile impostare un sottodominio che punti a questo ed è possibile installare il middleware che reindirizza l'utente "speciale" alla versione beta. Ciò consente di srotolare nuove funzionalità per alcuni utenti, ma non per altri.
Ora, i maggiori problemi si presentano con le modifiche al database. La migrazione dello schema è un grosso problema e qualcosa a cui la maggior parte di noi non presta mai attenzione. Penso che l'esecuzione side-by-side sia ottima, perché ti costringe a eseguire correttamente le migrazioni dello schema. Cioè, non puoi semplicemente chiudere tutto ed eseguire lunghe modifiche allo schema prima di ripristinarlo. Non vedresti mai nessun sito remotamente importante a farlo.
La chiave sono quei piccoli passi. È necessario avere sempre due versioni del codice in grado di accedere allo stesso database, quindi le modifiche apportate al nuovo codice non devono interrompere il codice precedente. Questo si risolve in alcuni passaggi che puoi sempre fare:
- È possibile aggiungere una colonna con un valore predefinito o facoltativo. Il nuovo codice può usarlo e il vecchio codice può ignorarlo.
- È possibile aggiornare la versione live con il codice che sa utilizzare una nuova colonna, a quel punto è possibile renderlo necessario.
- È possibile fare in modo che la nuova versione ignori una colonna e quando diventa la versione principale, è possibile eliminare quella colonna.
È possibile eseguire questi piccoli passaggi per migrare tra qualsiasi schema. È possibile aggiungere in modo iterativo una nuova colonna che sostituisce una vecchia, distribuire il nuovo codice e rimuovere la vecchia colonna, il tutto senza interrompere il servizio.
Detto questo, è la tua prima app web? Probabilmente puoi romperlo. Probabilmente hai pochi utenti :-) Ma è fantastico che tu stia facendo questa domanda. Molti "professionisti" sono giusti a chiederlo mai, e anche in questo caso meno rispondono.
Mi piacciono molto i tuoi punti sulla migrazione dello schema. Penso che ci sia spazio per l'interpretazione sul correre fianco a fianco. Sono stato in grado di eseguire tutti e tre i siti (produzione/staging/dev) su un server con database separati, ha funzionato alla grande. –
- 1. Come si esegue una versione specifica di Meteor?
- 2. Come verificare la versione di java quando si esegue gradle?
- 3. Come si esegue correttamente la versione di un programma?
- 4. Come si controlla la versione di OpenMPI?
- 5. Versione libreria incompatibile: XXX richiede la versione 2.0.0 o successiva, ma Runes fornisce la versione 1.0.0
- 6. Come si esegue il checkout di un repository SVN, sovvertendo una directory locale non versione?
- 7. Come si sviluppa OAuth localmente?
- 8. Come si modifica la versione di Rails su un Mac?
- 9. In che modo la versione Java di Android si riferisce a una versione di Java SE?
- 10. Questo SDK per Android richiede ADT versione 23.0.0 o successiva. La versione attuale è 22.6. Si prega di aggiornare ADT alla versione più recente?
- 11. Chrome non carica l'ultima versione dello script web worker (esegue una versione cache)
- 12. Come si imita la versione Microsoft di __FUNCTION__ utilizzando gcc?
- 13. È possibile inviare una nuova versione di testflight mentre un'altra versione è nella coda di revisione?
- 14. Ottenere errore "È richiesta la versione 1.10 di Gradle. La versione corrente è 1.12." quando si esegue "gradle wrapper"?
- 15. Quando si sviluppa un rubygem con estensioni C, come si esegue il test locale con Rspec?
- 16. Come impostare diverse scalacOptions per versione di Scala quando si esegue una compilazione incrociata utilizzando Build.scala?
- 17. come si rimuove una versione linguistica di un oggetto sitecore?
- 18. Come si trova la versione dell'Assembly del programma di chiamata?
- 19. Come si richiede una versione minima di zsh?
- 20. .GoogleAuthException: sconosciuto mentre si esegue Google SSO.
- 21. Come si verifica/verifica la versione di Kivy?
- 22. Eclipse esegue la vecchia versione del programma
- 23. come si esegue getResourceAsStream mentre si esegue il debug di Java in Eclipse?
- 24. Windbg si aspetta una versione diversa di mscordacwks.dll
- 25. Come aggiungere "leva" quando si sviluppa una gemma Ruby
- 26. Come specificare la versione .NET quando si utilizza l'opzione/CLR
- 27. oracle jinitiator versione troppo bassa installa la versione 1.1.8.2 o successiva
- 28. Come si ottiene la versione pubblicata corrente in un'applicazione .NET?
- 29. API Web Microsoft: come si esegue Server.MapPath?
- 30. Come si aggiorna la libreria aziendale all'ultima versione?
non solo due siti, anche due server, dev + staging – annakata
Tendo a mantenere la mia messa in scena finale nella stessa casella della produzione. In passato ho avuto la corsa dove c'erano piccole discrepanze tra il palco e il live, averlo nella stessa casella risolve un sacco questi problemi. – Luke