Drupal sitesindeki işbirlikçi gelişimi nasıl yönetebilirim?


12

Drupal sitesinde başka bir geliştiriciyle çalışıyorum. Sitenin farklı bölümlerinde aynı anda çalışmak için iyi bir yol bulmakta zorlandık. Sitenin aynı geliştirme örneği üzerinde çalışmayı denedik, ancak genellikle birbirimizin ayak parmaklarına basarız veya siteyi bazı kötü kodlarla indiririz ve bu da çözümlenene kadar diğerinin çalışmaya devam etmesini imkansız hale getirir. Bu yüzden ayrı geliştirme örneklerine geçtik. Ancak şimdi çalışmalarımızı sitenin tek bir örneğinde birleştirmek büyük bir acı. Temelde paylaşılan bir kopyadaki her şeyi yeniden yapıyoruz.

Şu anda sahip olduğumuz en büyük sorun, veritabanı değişikliklerini nasıl birleştiririz ve veritabanını kaynak kontrol sistemimize nasıl dahil ederiz? Dosyalar kolaydır, hepsini takip edin (git'i kullanıyoruz) ve çalışmamızı birleştirerek gerektiğinde çakışmaları çözer. Ancak bu gerçekten veritabanı ile çalışmaz. Bir SQL dökümü alabilir ve bunu git depomuza ekleyebiliriz, ancak veritabanlarını gerçekten birleştiremeyiz. Özellikler modülü bize sonra sürüm ve birleştirilebilir koduna bizim veritabanı işin bir kısmını ihracat icar biraz yardımcı olur. Ancak, her şeye yakın bile değil Özellikler destekler. Yani...

  • Veritabanı değişikliklerini kolayca birleştirmek için hangi adımları atabiliriz?

  • Veritabanını nasıl sürümlendirmeliyiz (git'e bir döküm dosyası koymak için iyi bir yol var)?

  • Bu sorunların bazılarına yardımcı olabilecek herhangi bir modül var mı?

  • Yoksa, sitenin aynı kopyası üzerinde çalışmaktan sıkıldık mı? (lütfen hayır)


Düzenleme: Yorumlarda neler Özellikler ile ihraç edilemez tartıştık ve bunlardan biri Taksonomiler oldu. Bununla ilgili başka bir soru daha var .


Merak ediyorum, özellikle Özellikler yoluyla ne yapamazsınız? Daha iyi bir soru, veritabanı birleştirme yolunu aşağı gitmek yerine bu şeyleri Özellikler ile veya Özellikler olmadan kod vermek için sormak olabilir.
deşifre

@Decipher Bayraklar, Taksonomi, Menüler, Bloklar ve gerçek içeriği düşünebilirim (ancak bunu yapan başka modüller olduğuna inanıyorum) ... Sanırım bu şeyleri dışa aktarmak için kendi kodumu yazmak gerçekçi olmaz. Daha sonra, Özellikleri desteklemeyen yeni bir modül kullanmak istediğimde, öncelikle destek eklemeliyim. Bunu yapacak vaktim yok.
Chaulky

Bence bazı şeylere destek eklemek için Drupalcon'da bir "Özellikler" sprint yapmalıyız.
coderintherye

1
@Decipher Tamam, bu yüzden tüm blokları kodda saklamanın yolları olduğunu kabul edeceğim. Ama yine de kullanmak istediğim her modüle zaten sahip olmayan özellikler desteği eklemenin mantıksız olduğunu düşünüyorum.
Chaulky

1
Bunu asla önermedim, sadece önerdiğiniz modüller için zaten özellikler desteği olduğunu öneriyorum (Bayrağın Strongarm aracılığıyla dışa aktarılabileceğini varsayarak). Seni bu yolda zorlamak için çalışmıyorum, sadece daha zor bir yolda, bir veritabanı tabanlı bir veritabanı yaklaşım daha kod tabanlı bir yaklaşım korumak için bir alternatif. Ekibimde yapabileceğim Unsurlar / Kod yaklaşımlarını şiddetle reddediyorum. Özelliğin Drupal'ın temel bir parçası olana kadar yapamayacağı birçok şey olduğunun farkındayım, ancak çok şey yapabilir.
deşifre

Yanıtlar:


5

Bu bir iş akışı değişikliğidir, ancak canlı DB'nin yeni bir dökümü üzerinde çalışmaya alışmalısınız. DB'de değişiklik almanın üç yolu vardır.

  1. Özellikleri. Bu her şey için işe yaramaz, ancak ihtiyacınız olan birçok şey için işe yarayacaktır.
  2. Güncelleme kancaları. Özellikler çalışmadığında, sahip olduğunuz bir modülün güncelleme kancası içine şeyler kodlayabilirsiniz.
  3. Manuel değişiklikler. Dikkatli kullanın. Bazı şeyler doğal olarak özelliklere veya güncelleme kancalarına gelmez ve manuel olarak yapmak çok daha kolaydır. Bu son çare ama bazen tek korsan yoludur.

Yapabilirsen. Günde birkaç kez yeni bir dökümü alın ve yapınızı test edin, daha az entegrasyon probleminiz olmalıdır.


4

Benzer bir soruyu yanıtladım ve sorunuzu burada yanıtlamak için biraz ayarlayacağım. Benim kök önerim, sürekli bir entegrasyon sistemi kullanılarak (örneğin her 5 dakikada bir) kod değişikliklerinin kontrol edildiği bir geliştirme / hazırlama sunucunuz olması. Böylece, yerel makinenizde, bir seferde yalnızca bir özellik isteği / hata raporu üzerinde çalışarak, bu görevi insanların üzerinde çalışmakta olabileceği diğerlerinden açıkça tanımladığınızdan ve üzerinde çalıştığınız takım arkadaşlarınızla (redmine veya diğer hata izleme bunun için harika). Ardından, değişiklikleri düzenli olarak yaparsınız ve ekip arkadaşlarınız gibi geliştirici / hazırlama sunucusuna çekilirler. İdeal olarak, sürekli entegrasyon sisteminizde yerleşik birim testleriniz vardır (bu arada luntbuild veya QuickBuild'i tavsiye ederim, ancak Hudson da çalışır). CI sistemi veya testleri, kodunuzu kontrol ettiğiniz anda girmiş olabileceğiniz çatışmaları otomatik olarak alabilir. İçerik (kodsuz) değişiklikleri yapmanız gerekiyorsa, bunu geliştirme / hazırlama sunucusunda yaparsınız.

Veritabanı kısmına gelince, temelde burada iki düşünce okulunu benimsedim (3. bir düşünce okulu, veritabanı farkları yapmak, tartışmayacağım çünkü karmaşıklık oldukça yüksek).

1) Üretim veritabanını bırakarak ve geliştirme veritabanının mysqldump'ını içe aktararak dağıtın. İsteğe bağlı olarak, SQL dökümünde dev URL'ye başvuran sabit kodlu mutlak bağlantılarda önceden regex find / replace komutunu çalıştırın. Dev db'yi prod'a aktardıktan sonra, prod için dev'den farklı ayarları değiştirmek için SQL ifadelerini (genellikle komut dosyasıyla) otomatik olarak çalıştırın (örneğin, değişken tablosunda, ihtiyacınız olan harici sistemlere bağlanmak için bazı bağlantı ayarları var. dev sürümü yerine prod harici sistemlerde noktaya değiştirin).

2) Yönetici ayarları için budda tarafından belirtildiği gibi Özellikler modülünü kullanın ve Tümünü Sil modülü ile birlikte içerik dışa / içe aktarma için Düğüm Dışa Aktarma modülünü kullanın. Yani iş akışı:

Düğümleri / özellikleri dosyalara aktarmak için node_export ve özellikleri kullanın İsteğe bağlı (ve umarım) sürüm kontrolü Prod sistemine dosya yükleme Özellikleri yüklemek için drush veya admin arabirimini kullanın Almak istediğiniz türlerin tüm düğümlerini silmek için drush-all veya admin arabirimini kullanın Düğmeleri dışa aktardığınız düğümler dosyasından içe aktarmak için drush ne-import veya admin arabirimini kullanın. Bir not, içeriğin yalnızca bir yöne gittiği standart bir iş akışını benimsemenizi şiddetle tavsiye ederim. Ya Dev -> Prod veya Prod -> Dev (Bunu tercih ederim).

Bunu yaptım ve bunu oldukça iyi sonuçlarla bazı büyük sistemlerde yapıyorum, ancak her zaman bu elmayı dilimlemenin birçok yolu olacak, hangisinin sizin için en uygun olduğunu seçin.


0

Bu kabul edilmiş bir yanıtı olan eski bir soru olsa da, yine de başka bir soruya yer olduğuna inanıyorum.

İlk olarak, Özellikler'in bu görev için doğru araç olduğunu düşünmediğimi ve alternatif bir araç seti önereceğimi söyleyeyim .

Ekip işbirliği için bir ön koşul, projenin üretim sunucunuzdan ayrı geliştirme sürümlerini test etmek için bir hazırlama sunucusuna sahip olmaktır. Tüm tahsis kodu hazırlama sunucusunda test edilir ve üretim sunucusuna yalnızca kararlı ve devreye alınmaya hazır olduğunda gönderilir. Ancak, geliştiriciler doğrudan hazırlama sunucusunda çalışmaz. Her geliştirici, çalışmalarını ekibin geri kalanıyla koordine etmek için bir revizyon kontrolü ve kaynak kodu yönetimi (SCM) kullanarak kendi iş istasyonunda çalışır.

SCM sistemi, ekip üyelerinin birbirlerini etkilemeden kodun farklı dallarında paralel olarak çalışmalarına izin verir . Test amacıyla, hazırlama sunucusuna yalnızca ana dal dağıtılır.

Veritabanını üretim, aşamalandırma ve iş istasyonları arasında yansıtmak için , paylaşımlı barındırma kullanıyorsanız ve kendi veritabanınızı yönetmiyorsanız kullanılabilecek Yedekleme ve taşıma adında bir modül vardır . Kendi veritabanı sunucunuzu yönetiyorsanız, bu sunucudaki tek proje budur ve mysql kullanıyorsanız , aşağıdaki komut çifti kullanışlıdır:

Boşaltmak için:

mysqldump --all-databases --opt -u root -p > DUMP.sql

Yenilemek:

mysql -u root -p < DUMP.sql

Sizinkiniz bu sunucudaki tek veritabanı değilse, yalnızca veritabanlarınızı döken bazı sürümlerini mysqldump(veya mysql kullanmıyorsanız eşdeğer) komut dosyası oluşturun .

Ana olan üretim sunucusundaki veritabanı ilkesini belirleyin. Hazırlama sunucusu ve iş istasyonları, tam tersi değil, üretim veritabanının bir kopyası olmalıdır.

Drupal 7'nin tüm yönetici ayarlarını veritabanında tuttuğunu unutmayın. Bu, veritabanını üretim sitesi, hazırlama sitesi ve iş istasyonları arasında yansıtmanın, yönetici ayarlarını Özellikler olmadan geçireceği anlamına gelir .

Şimdi, kodu paylaşmak için:

Bir geliştirme ekibinin üyeleri arasında kod paylaşmanın standart yolu SCM sistemini kullanmaktır. Drupal varsayılan olarak git adlı böyle bir sistemle yönetilir .

Git , yerel veya uzak depoların kullanımına izin verir. Ekip üyeleri aynı fiziksel alanda bulunuyorsa, hazırlama sunucunuzda yerel bir depo oluşturabilirsiniz. Coğrafi olarak yayılmışlarsa, uzak bir depozito ayarlayabilirsiniz. Geliştirilmekte olan kodunuzda başkalarının okuma erişimine sahip olduğunu düşünmezseniz, uzak depo olarak Drupal.org'daki bir korumalı alanı kullanabilirsiniz . GitHub'daki bir proje alanını da kullanabilirsiniz . GitHub sadece bir depo değil, aynı zamanda işbirliği için bazı araçlar ile birlikte gelir ve hem genel hem de özel depolara izin verir.

Temel olarak, bir SCM sistemi, ekip üyelerinin, ekip üyeleri tarafından paylaşılan depodan kaynak kodu ve belgeleri almasına ve üzerinde çalıştıktan sonra tekrar içeri itmesine izin verir. SCM değişiklikleri takip eder ve bir çatışma varsa (örneğin, başka bir ekip üyesinin taahhüt ettiği değişiklikleri içermeyen bir kod zorlamaya çalışırsa), size söyleyecek ve bu çatışmayı çözmenin bir yolunu önerecektir.

Genellikle, görevlerin ekip üyeleri arasında nasıl bölündüğü ile ilgili bazı samimi iletişimde, çatışma olmayacaktır. Ancak SCM sistemi olayları takip ederken, hatalar yapılsa veya iletişim başarısız olsa bile çatışmalar yönetilebilir hale gelir.

Git (GIYF) kullanmaya başlama ve kullanma konusunda birçok öğretici var . İki tavsiye edeceğim: git-scm web sitesi ve Pro Git by Scott Chacon.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.