it-swarm-tr.com

Karmaşık Değişiklikleri Dağıtma

Bazen, veritabanlarında (yeni veya değiştirilmiş tablolar) ve dinamik kaynak kodunda (PHP veya ColdFusion gibi) değişiklik gerektiren bir web sitesine oldukça karmaşık değişiklikler yapmamız gerekir. Canlı web sitesinde her şeyi bozmadan bu değişiklikleri hızlı bir şekilde paketlemenin ve dağıtmanın en iyi yolu nedir?

4
Justin Scott

Kısa cevap: boyundaki bir acı!

Bunu birkaç kez yapmak zorunda kaldım (ve her seferinde benim yaptığım tasarım hakkında daha fazla düşünmek istememe neden oluyor). Yaptığım şey, kod tabanını bir Geliştirme bölümüne (veya klasöre veya sunucuya, vb.) Yerleştirmek, böylece tüm hataların yayına geçmeden önce dışarıda olduğundan emin olmak için ayrı ayrı çalışabilirim. Daha sonra her zaman ilk iki satırda aynı olan bir SQL betiği oluşturdum:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Bu, komut dosyasının her şeyi tamamen taze ve boş bir veritabanına yerleştirmesini sağlar. Komut dosyasının geri kalanı, eski veritabanından yeniden kullandığım tüm tabloları yenisine oluşturur. Sonra yeni (veya değiştirilmiş) tabloları yeni veritabanında oluşturacağım. Sonunda, tüm verileri canlı sunucudan geliştirme sunucusuna taşıyacağım. Bu, ne kadar veri taşıdığınıza ve ne kadar hızlı taşıyabileceğinize bağlı olarak uzun zaman alabilir, bu yüzden senaryoyu dikkatlice düşünmenizi öneririm çünkü ne kadar az çalıştırmanız gerekiyorsa o kadar iyidir.

Yeni geliştirme veritabanını kurduktan ve çalıştırdıktan sonra, geri kalanı onu kullanmak için yeni kod oluşturmaktır. Bu bir kez belirtildikten sonra, dağıtım nispeten kolay olmalı (muhtemelen zaman alıcı olsa da). Tüm yeni canlı verileri dağıtım sunucusundaki yeni veritabanına kopyalamak için aynı betiği kullanmanız ve oradaki tüm yeni kodu kopyalamanız yeterli!

İşte böyle yapıyorum ve acı iken, işe yarıyor. Daha iyi bir yol varsa, dinlemekten mutlu olurum.

pdate: Tchalvak'in yorumuna cevaben, evet, bütün tablo tanımlarını gerçek verileri olmadan almak için genellikle aşağıdakileri kullanırım:

mysqldump --databases --no-data databaseName > newScript.sql

Daha sonra bu betiği yukarıda açıklandığı şekilde değiştireceğim.

3
Mike

"Geri alma yeteneği" kazanmak için, gerçekten git veya Mercurial(dağıtılmış sürüm kontrol sistemleri) ile tanışmanızı öneriyorum.

Kaynak kodunuzla düz dosyalarda çalışmanız gereken gün sona ermiştir (şimdi bununla birlikte düz dosyalarda çalışmalısınız, ancak onları izleyen gerçekten sağlam bir değişiklik kontrol sistemine sahip olmalısınız).

2
Kzqai

Genelde yaparım (LAMP tarzı siteler için):

  1. değişikliklerinizi tanımlayın sonra bunları uygulamak için bir komut dosyası yazın (Bir Makefile kullanıyorum).
  2. Test gerçek ortamı temsil eden bir veri örneğindeki değişiklikleriniz
  3. Test emin olmak için tekrar
  4. Kendine bir çıkış yolu ver, geri alma kabiliyetine sahip

Bir küme çalıştırıyorsanız, o zaman site durumu, önbellek vb. İle daha büyük baş ağrıları yaşayabilirsiniz.

0
Aiden Bell