Devam eden bir sitede çalışan birden fazla geliştirici / düzenleyici


28

Arka fon

Oldukça büyük ilk WordPress sitemi kurmanın son aşamalarına yaklaşıyorum ve şimdi biraz sürtünme ile karşılaşıyorum. Bu site, yerel makinemde geliştirildi ve değişiklikleri incelemek için sahneleme sunucusunda değişiklik yapacağım ( daha fazla bilgi için bu soruya bakın ). Sonunda çözdüğüm çözüm, yalnızca içeriği düzenlerken ben de oldukça işe yaradı, ancak şimdi başka bazı insanlar da ekleyecek özelliklere sahipken içeriği düzenliyorlar. Fikir şuydu: özellikler ve içerik konserde bir araya gelirse işleri daha çabuk halledebilirdik ... ama şimdi pek emin değilim.

Şu anda hazırlama sunucusundaki veritabanında yerel makinemden farklı içerik var. Yerel makinemdeki son vücut kopyasına ihtiyacım olmadığından, kendi başına sorun yok, ancak veritabanını etkileyecek daha fazla geliştirme yapmam gerekiyor (kendi tablolarına ihtiyaç duyan birkaç eklenti daha yükleyin / yazın).

Sorum şu:

Birden fazla kişinin WordPress yüklemesinde çalışabilmesi için veritabanlarının birleştirilmesini otomatikleştirmenin kolay bir yolu var mı? Elbette, yerel makinemde değiştiğini bildiğim tabloları dışa aktarabilir ve bunları hazırlama sunucusuna zorlayabilirim, ancak hazırlama sunucusunda aşağı çekmek istediğim şeyler de olabilir. Her iki DB'nin de SQL çıktısını alabilir ve onları ayırabilirdim ... ama bu çok sıkıcı ve aceleci görünüyor. Bunun başkalarının çözdüğü bir sorun olup olmadığını merak ediyorum; Bu tür şeylerle başa çıkmak için topluluk tarafından kabul edilen bir yol varsa.

Teşekkürler!


Başka bir siteye kapanmak veya başka yere taşınmak için oy vermek (Jan: iyi olan hakkında herhangi bir düşünceniz var mı? Superuser olabilir). Bu, WordPress'e özgü değildir, çünkü Drupal, Joomla veya herhangi bir PHP + MySQL ile çalışan sitelerde aynı sorunları yaşarsınız.
John P Bloch

Söylendiğine göre benim önerim, yerel bir yerine uzak bir hazırlama sunucusu kullanıyor olmanız.
John P Bloch

@ John P Bloch: Drupal ile Drush gibi bir şey bu durumda çok yardımcı olacaktır. Şahsen bu tür sorunların demirbaşlar tarafından hafifletildiği Django'ya alışkınım. Ayrıca, şu anda iki aşamalı sunucum var: biri yerel diğeri uzak. Mesele şu ki işimi uzak makinemde yapıyorum, fakat başkalarının görebilmesi için onu bir sunucuya itmem gerekiyor. Son sunucu, her şeyi bir araya getirdiğimizde kurulacak bir şey.
Gavin Anderegg

2
@ John P Bloch - Bunun burada iyi bir soru olarak anlaşılmasının nedenleri olduğunu düşünüyorum. Şu anda cevaplamak için zamanım yok ama umarım başkaları bunu yapar.
MikeSchinkel

1
@Gavin: Üzgünüm, sorunuzu yanlış yorumladım. Evet, üretim sunucusundaki her şeyin üzerine yazacağına inanıyorum. : /
Zack

Yanıtlar:


16

Bu soruyu bir yıl önce sordum ve bu süre zarfında ekibimize daha fazla kişi ekledik ve WordPress'te çok daha fazla sayıda site geliştirdik. Başkasına yardımcı olabileceği için sürecimizde dolaşmak istedim.

Git'teki her şey

Bu soruyu sorduğum halde yaptığım bir şeydi, ama bu noktayı söylemek güzel. Git'i kullanmak sadece daha üretken olmamıza yardımcı olmadı, aynı zamanda toplu kıçlarımızı da birkaç kez kurtardı.

Bir siteye büyük yapısal yenilemeler yapmanız, bir müşteriden bu yenilemeler için onay almanız ve bu süre zarfında yenilenmemiş sürümde küçük güncellemeler yapmanız gerekti mi? Yaptık ve Git yapmamıza izin verdi. Bu düzeneğin tanımlanması biraz uzun sürecektir, ancak temel hususlar yeni bir dal oluşturmamız, o dalı sunucuya çekmemiz ve bu dala bir alt etki alanı eklememizdir.

Ayrıca Git tarafından da kurtarıldık. Elbette ki değişiklikleri geri almamıza izin veriyor, ki bu harika, ama aynı zamanda dosyaların eski sürümlerini geri getirmemizi de sağlıyor. Bunun anlamı, bir müşteri "Sitenin bu bölümünün bir yıl önce nasıl çalıştığını hatırlayın? Bunu geri getirebilir miyiz?" Diye sorarsa, cevap evet - sorulan kişi bir yıl bu projede olmasa bile önce.

Bu noktaların yanı sıra, ihtiyacımız olan dosyalar olmadan asla sıkışıp kalmayacağımız anlamına da geliyor. Her zaman sitenin en yeni sürümünü herhangi bir makineden indirebilir ve değişiklik yapmaya başlayabiliriz.

Dağıtmak için Git'i kullanın

WordPress'imizi Media Temple'da barındırıyoruz ve gerçekten beğeniyoruz. En ucuz sağlayıcı değiller, ancak hizmetleri mükemmel ve sunucuları gerçekten iyi ayarlanmış. Ayrıca, varsayılan olarak Git özelliğini de sağlar. Bu, sunucuyu Git deposu olarak ayarlayabileceğimiz ve SFTP kullanmak yerine değişiklikleri bu şekilde çekebileceğimiz anlamına gelir. Ayrıca, sunucu üzerinde çalışma yapmanın üzerine yazılma tehlikesi olmadığı anlamına gelir (çünkü bu değişiklikler birleştirilebilir ve geriye itilebilir).

BitBucket'i Git sunucumuz olarak kullandığımız için, burada biraz daha fazla iş yapmanız gerekiyor. Öncelikle .ssh / config dosyalarını kullanıyoruz, böylece ssh sitenamesunucularımıza giriş yapmak gibi şeyler yazabiliriz (ayrıca bunu süper kolaylaştıran şifresiz SSH kullanıyoruz ). Ayrıca, her zaman ssh parolalarını kullandığınızdan emin oluruz (Mac OS X, parolanızı Keychain.app içerisinde saklamanıza izin vererek bunu çok kolaylaştırır ). Son olarak, ForwardAgent satırını, çekmek istediğimiz ana bilgisayarlardaki .ssh / config girişine ekleriz. Bu, her bir sunucunun ortak anahtarına değil, yalnızca BitBucket'teki SSH ortak anahtarına ihtiyacımız olduğu anlamına gelir. Ayrıca, .gitdizini herkese açık HTML dizininin üstünde tuttuğunuzdan da emin olun .

Otomatik veritabanı dökümleri

Sunucu üretim moduna geçtiğinde, veritabanımızı otomatik olarak yedeklediğinizden emin olabiliriz .

Herkesin kendi wp-config'si vardır

Hepimizin kendi yerel veritabanı kullanıcı adlarımız ve şifrelerimiz olduğu ve farklı isimler ve servis mekanizmaları kullanabileceğimiz için, her biri kendi wp-config dosyamızı tutuyor. Bunların her biri gibi bir isim ile Git saklanır wp-config-gavin.phpve biz o yapılandırma kullanmak istediğinizde, biz sembolik bir link bunu wp-config.php(kullanarak Git tarafından ihmal edildiği .gitignore ).

Bu aynı zamanda aşağıdaki gibi veritabanı tablosundaki siteurlseçeneği geçersiz kılmamızı sağlar wp_options:

define('WP_SITEURL', 'http://sitename.localhost');
define('WP_HOME', 'http://sitename.localhost');

Bu, WordPress'in sunucu konumu için veritabanına bakmasını önler ve yerel ve sunucu kurulumları arasında konum olarak garip farklılıklar olmadığı anlamına gelir.

Wp-config.php dosyalarıyla ilgili son bir not: bunları genel HTML dizininin üzerinde sakladığınızdan ve izinlerin yalnızca web kullanıcısı için okunmasını sağlayın . Bu, WordPress'in güvenliğini sağlamada büyük bir fark yaratıyor.

Veritabanı sorunu

Sonunda, maddenin et.

Kabul etmem gereken, WordPress kullanırken, veritabanı değişikliklerini "birleştirmek" için iyi bir yol yok. Bunun yerine, bunu çözmek için davranış kuralları geliştirmemiz gerekiyordu. Kurallar oldukça basit ve bize şu ana kadar iyi hizmet etti.

Geliştirme sırasında, sitenin "sahibi" olan tek bir kişi var. Bu kişi genellikle kurulumu yapar (barındırma paketini bir araya getirmek, Basecamp projesini başlatmak, tasarımı dilimlemek, bu tür şeyler). Bu kişi makul bir noktaya geldiğinde, WordPress kurulumu için veritabanını çöpe atıp Git'e koyun. Bu noktadan itibaren, geliştirme yapan herkes bu veritabanı dökümünü kullanır ve veritabanında değişiklik yapan yalnızca sahibi sahibidir.

Site oluşturma işlemi biraz daha ilerlediğinde, site bir sunucuya yerleştirilir. Bu noktadan itibaren, sunucunun veritabanı kurallıdır. Herkes (sahibi dahil) sunucudaki tüm veritabanı değişikliklerini yapmalı ve yerel geliştirme ve test için değişiklikleri aşağı çekmelidir.

Bu işlem mükemmel değil. Yine de birilerinin geliştirme sırasında yerel olarak WordPress'te değişiklik yapması gerekebilir ve daha sonra bu değişiklikleri üretimde yapması gerekebilir. Bununla birlikte, bu tür şeylerin nadir olduğunu bulduk ve bu süreç bizim için oldukça iyi çalışıyor.


1

Böyle bir yükleme üzerinde çalışıyorum ve daha önce bunun gibi soruları cevapladım . Bu tür işler için tercih ettiğim kurulum aşağıda. Var olan bir veritabanını değiştirmek yerine veritabanlarını birleştirmek istediğiniz için, bunlara MySQL dökümü yaparken --add-drop-table bayrağını kullanmamaya dikkat ederim .


  • Adım 1. Geliştirme veritabanını Mysqldump
  • Adım 2. Tüm development.domain.com örneklerini production.domain.com ^^ ile değiştirin
  • Adım 3. MySQL'e giriş yapın, örneğin verileri almak için bir SOURCE komutu çalıştırın. source /path/to/file

^^ Eski alanın bütün örneklerinin yenileri ile nasıl değiştirileceği: (1) Aşağıdaki betiği kopyalayın. (2) chmod +xo. (3) Koş.

Kullanımı: ./script.sh development-dump.sql > production-dump.sql

#!/bin/sed -f
s/'\([^\\']*\)development.domain.com\([^\\']*\)'/'\1production.domain.com\2'/g

2
Kendine iyi bak: sed, daha önce serileştirilmiş olan mysql dökümlerinde kodlanmış verilerle ilgilenemez.
hakre

Daha önce cevapladığınız soru benimki aslında :) Burada farklı bir soru sorduğumu hissediyorum. Sadece üzerinde çalıştığım zaman tüm DB'yi boşaltmak harikadır, ancak bunu yukarıda açıklanan durumda yaparsam, diğer insanların değişikliklerinin üzerine yazacağım veya kendi değişikliklerimin üzerine yazacağım. Birden fazla kişi WordPress örnekleri üzerinde çalışırken, değişiklikleri birleştirmek için çalışıyorum.
Gavin Anderegg

1

Şu anda bu aynı sorunun farklı çözümlerini deniyorum. Kesinlikle zor bir şey.

Şu anki çözümüm, --skip-extension-insert bayrağını kullanarak yerel bir mysql dökümü yapmak. Bu bayrağın veritabanının her satırı için bir insert record deyimi oluşturduğuna ve dökümü biraz daha birleştirme dostu hale getirdiğine inanıyorum. Bu hileyi bu makaleden aldım: http://www.viget.com/extend/backup-your-database-in-git/ .

Ardından, sitenin kaynak dosyalarıyla birlikte Git'i kullanarak ortaya çıkan .sql datadump dosyasını kontrol ederim. Başka bir geliştirici kod değişikliklerini çözdüğünde, .sql dosyası onunla birlikte gelir. Daha sonra bu dosyayı veritabanının yerel sürümüne aktarır. MAMP kullanarak her iki makinede de kendi yerel veritabanlarımızı aynı şekilde hazırladık, bu nedenle herhangi bir arama yapıp değiştirmeye gerek kalmadı.

Birleştirme sorunları oldu, bu nedenle veritabanı değişikliğine neden olacak herhangi bir şeye "sırayla dön" yaklaşımı benimsemeye çalışıyoruz. Wordpress'te veritabanını değiştirecek herhangi bir şey yapmadan önce, en son dökümü için kontrol edildiğinden, çekip aldığından ve benim yaptığım ve kontrol edene kadar herhangi bir DB değişikliği yapmamasını istediğinden eminim. Bu açıkçası ideal değil ve daha iyi bir çözüm arıyorum ama bu bir başlangıç. Aynı zamanda bize güzel DB sürüm kontrolü veriyor.

Bizi sunucuda paylaşılan bir dev veritabanı kurabilirim ve web sitesinin her iki yerel kopyasını da SSH tünelleme yoluyla aynı DB'ye bağlamayı deneyebilirim. Bununla birlikte, bu yaklaşım, birimiz bir eklenti kurduğunda sorun yaşayacaktır. Temelde PHP dosyaları ve MySQL DB senkronize edilmeyecek.

Başkalarının bu sorunla nasıl başa çıktığını duymak için sabırsızlanıyorum.

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.