Nasıl "yükseltme"

3 Cevap php

Benim şirket php + mysql kullanarak bir web uygulaması geliştirmek var. Sistem kullanıcıya bir ürünün orijinal fiyat ve indirimli fiyat görüntüleyebilirsiniz. Eğer logined varsa, size loginned varsa, indirimli fiyat almak, orijinal fiyat olsun. Bunu anlamak oldukça kolaydır.

Ama benim şirket farklı kullanıcı üzerinde farklı fiyatlar baz görüntülemek istiyorsanız, sistemde daha fazla özellikler istiyorum. Örneğin, kullanıcı bir o% 50 indirim alabilirsiniz, bir altın parnter olduğunu. Kullanıcı B sadece kapalı% 30 var, bir gümüş parnter olduğunu. Ama bu mantık orijinal sistem hazırlamak değil, bu yüzden bu örnekte en az bir kullanıcı tipi, veritabanında bazı özellik eklemek gerekir. Veritabanının yeni sürümüne geçerli veritabanını birleştirme konusunda herhangi bir öneri yoktur. Ayrıca, tüm veri yeleği gerektiği ve sunucu 7/24 çalışan gerekir. (Veritabanını durdurmak içinde)

Bunu yapmak mümkün mü? Ayrıca, herhangi bir gelecek maintaince tavsiye öneriyor? Thz u.

3 Cevap

Veri erişim katmanı için bir ORM kullanmak mı? Ben Doktrin sürümü (bir şey yeni sürümü ile yanlış gitti durumda) aşağı yukarı geçiş ve izin bir göç API ile geliyor biliyorum.

(Süreç çok uzun ise veya kesinti) herhangi bir çerçeve veya ORM göz dışında, hızlı bir betik yavaşlamayı en aza indirecektir.

Benim görüşüm, ben oldukça kısa SEKTEYE zaman alıyorum ama hiç görünür bir hata veya hiçbir görüntü almak daha bir bilgi sayfası ile bir 30sn sitesine erişim kesinti, tercih ederim. Kesinti süreleri konularda ise, en iyi gece ya da ne zaman daha az trafik bu yapıyor.

Biz bir kabuk dahil bu tür komut yapmak isterdim bu tüm bir komut yapılan (ya da en azından bir commande hattı tarafından başlatılan) edilebilir:

  • Bekleme (geçici statik sayfa) uygulama koyarak:. Eğer htaccess yönlendirme ya da app / sunucu ortamında uygulanabilir olursa olsun kullanabilirsiniz.
  • kaynak kodu ve varlıkları yükseltme için svn udpate (veya switch)
  • vs boş önbelleklerini, geçici dosyaları temizleme,
  • oluşturulan sınıfları (symfony özel) yeniden
  • ALTER / TABLE querys YARATAN DB yapı yükseltme
  • Gerekirse, eski yapının yeni veri göç: Eğer yapısı değişti ne bağlı olarak, DB yapısını değiştirmeden önce veri getiriliyor gerektiren veya tmp tablolar kullanabilirsiniz.
  • her şey iyi giderse, geçici sayfayı kaldır. Bitti Yükseltme
  • Olayın ne görebilirsiniz şey operatöre Yanlış ekran kırmızı bir mesaj gitti, bunu düzeltmek için çalışın ve daha sonra elle bekleyen sayfayı kaldırmak.

The script should do checks at each steps and stop a first error, and it should be verbose (but concise) about what it does at all steps, thus you can fix the app faster if something has to went wrong. The best would be a recoverable script (error at step 2 - stop process - manual fix - recover at step 3), I never took the time to implement it this way.

If works pretty well but these kind of script have to be intensively tested, on an environnement as closest as possible to the production one. In general we develop such scripts locally, and test them on the same platform tha the production env (just different paths and DB)

Bekleme sayfa bir seçenek değilse, sen whithout gidebilirsiniz ama veri ve kullanıcıların oturum bütünlüğünü sağlamak gerekir. Örnek olarak, yükseltme / veri transferi sırasında masalarda LOCK kullanımı ve değiştirilmiş dosyaları özel kilit (SVN Bence yok) kullanın

Diğer iyi çözümler, ama orada ben kullanmak ne temelde ve bu bizim için iş yapabilirdi. Büyük dezavantajı script bu tür her büyük sürümle yeniden yazılması gerekiyordu olduğunu, bu bana bunu yapmak için diğer seçenekler aramak için incitate, ama hangisi?? Burada birisi iyi ve daha basit bir alternatif olsaydı ben memnun olurdu.

Ben adım adım veritabanlarına SQL sorguları çalıştırmak için bir yazma aracı öneriyoruz. Çok Raylar göçler gibi.

Şu anda üzerinde çalışıyorum sistemde, biz Python ile yazılmış, biz Betiklerimizin 0s our SCM (subversion) olarak revizyon numarası ve araç geliştirme parçası olarak verilmektedir 000000_somename.sql şey gibi adı, aracı have / test ve nihayet üretim dağıtma.

Bu, (Bir kaynak kodu sürüm kontrol aracı kullanırsanız) çok fazla kod gibi, veritabanı değişiklikleri açısından zaman içinde geriye gitmek mümkün olmanın yararı vardır.

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Here are more concrete examples of ALTER TABLE.
http://php.about.com/od/learnmysql/p/alter_table.htm

Sen GÜNCELLEME her kullanıcı için kullanıcı türünü ayarlamak sonra, ALTER TABLE ile masaya gerekli sütunlar ekleyebilirsiniz. Sonra app yeni bir sürümünü dağıtmak. Bu yeni sütun kullanır.