2009-06-01 15 views
5

Quali sono alcune best practice e teoria generale dell'implementazione multistadio per le app Web?Consigli di implementazione multistadio?

Sono particolarmente interessato nella distribuzione di applicazioni Rails utilizzando Git, Capistrano, e passeggeri, e ho trovato i messaggi che discutono i dadi e bulloni del processo:

Quali considerazioni dovrei prendere in merito a ciascuna fase (test, stadiazione, produzione)? Le fasi dovrebbero essere distribuite su diversi server fisici? Qualche consiglio o consiglio sulla distribuzione multistadio? Qualche ostacolo dovrei cercare?

migliore,

Jacob

+1

Spiacente, ho dovuto rimuovere i due collegamenti ipertestuali a quei post del blog per poter pubblicare la domanda. Chiunque sia interessato a saperne di più può Google quegli elementi per andare direttamente ai post. – trisignia

+0

Perché hai dovuto rimuovere i collegamenti ipertestuali? –

+1

Sono un nuovo utente qui e StackOverflow non mi permetterà ancora di pubblicare collegamenti ipertestuali nelle mie domande. – trisignia

risposta

0

E 'meglio avere due differenti ambienti server: staging e produzione. Ignoro sempre l'ambiente di test. L'ambiente di test agisce come la produzione, ma al termine del rollback del database. L'esecuzione sia sullo stesso server potrebbe influire negativamente sulle prestazioni e sulla stabilità dell'ambiente di produzione. L'aggiornamento di un gioiello da testare nell'ambiente di staging può influire negativamente sulla produzione e costare tempi di inattività.

Devi essere molto vigile che le stesse versioni gem sono su entrambi i server. Può significare problemi se una versione di un'app funziona in staging ma non in produzione a causa di questo tipo di discrepanza.

Avrei sempre una finestra della console aperta che è pronta a ripristinare l'ultima distribuzione nel caso qualcosa vada storto. Non c'è molto altro in questo processo.

Risparmia un po 'di soldi e acquista il server di sosta più economico che puoi. Sei l'unico che lo utilizzerà, giusto? Assicurati che siano dello stesso fornitore.

+0

L'ambiente di test non è un ambiente in cui è necessario eseguire un server. È strettamente destinato all'uso da parte dell'unità, test funzionali e di integrazione. La maggior parte delle persone "esegue" questo nella sua stessa finestra di sviluppo, dal momento che se dovessi eseguire i test prima di controllare qualsiasi nuovo codice. –

1

Ho sempre appena creato compiti cap per ogni target deploy e li hanno usati nella riga di comando:

# deploy.rb 
task :stage do 
    server 10.0.0.1 ... 
end 

> cap stage deploy 

è possibile definire anche personalizzare le attività all'interno di ogni compito di destinazione, come ad esempio un deploy che fa pulizia in messa in scena, ma non in produzione.

Dato che questi compiti di destinazione sono raramente molto grandi, non ho mai veramente visto il punto di qualcosa come l'installazione delle estensioni dei berretti per multistadio, ma suppongo che le situazioni di altri possano essere diverse.

Penso che la produzione dovrebbe essere separata dagli altri ambienti, altrimenti c'è il rischio che processi non funzionanti nella messa in scena o simili possano influenzare le prestazioni di produzione.

A volte definisco le attività di protezione per comodità nella messa in scena, come ad esempio la distruzione del database e il ricaricamento dal dump di produzione più recente. Queste attività dovrebbero controllare il loro obiettivo di distribuzione tramite una variabile impostata o simili e rifiutarsi di correre per la produzione come assicurazione contro un errore di battitura a tarda notte.

Si tende a mettere un sacco di comportamento personalizzato nel deploy.rb, ma ho trovato che questo tende a mordere e richiede un sacco di sforzo di manutenzione come il tuo ambiente o la modifica della cap api.

Un'altra pratica che ho visto con ambienti più grandi è di avere un account di shell con un checkout che tiene traccia del ramo stabile appositamente impostato per agire come il punto di controllo capistrano. Ssh in ed esegui i comandi cap lì invece che localmente. Questo può aiutare a evitare problemi in cui deploy.rb del checkout locale ha modifiche che non sei pronto per utilizzare con la distribuzione in produzione. Questo è meno un problema con git vs svn, ma bisogna stare attenti a pensare a cosa sia il loro deploy.rb locale nel momento in cui stanno eseguendo i comandi cap.

Heroku sta rendendo davvero facile questa roba in questi giorni, e EY e altri non sono esattamente indietro.

0

Abbiamo utilizzato la distribuzione multistadio capistrano con successo per oltre un anno. Il sistema separa bene i file di distribuzione per ogni fase in modo quasi identico ai file di ambiente di Rails. È stato molto semplice da configurare e gestire.