Mi piacerebbe aggiornare un sito web dal vivo in modo atomico. Se abbiamo apportato diverse modifiche a pagine, immagini e javascript, tutte le modifiche dovrebbero apparire contemporaneamente senza tempi di inattività, incoerenza o 404 s.Aggiornamento sito web atomico con Git
Se copio semplicemente i file modificati nella directory del sito Web, quindi almeno alcune richieste vedranno un sito incoerente. Se copio il nuovo sito in una directory separata, quindi rinomina la vecchia directory per metterla fuori produzione e rinomina la nuova directory per renderla attiva, quindi per un breve momento otterremo 404.
Ho due domande:
Come posso aggiornare una directory di file in maniera atomica?
Come posso coordinarlo con Git? Ci piacerebbe essere implementati usando un git pull (o possibilmente push). Il percorso del sito all'interno del repository git è diverso dal percorso sul server, quindi è necessario un po 'di spostamento/ridenominazione, utilizzando comandi git o comandi del sistema operativo.
Capistrano è uno strumento che utilizza i collegamenti simbolici per distribuire il codice atomicamente. – user1158559
Questa è una grande risposta. C'è una piccola possibilità, però, di risultati incoerenti perché un browser potrebbe richiedere una pagina, il sito potrebbe cambiare, e quindi la pagina potrebbe richiedere un'immagine o un file css che non era più lì. Ma non c'è nulla che tu possa fare al riguardo sul lato server. – ccleve
@ccleve Se si voleva essere veramente fantasiosi, si potrebbe tentare di bloccare ogni sessione keepalive in una singola release o giocare con i cookie. – Zenexer