問題描述
背景
我正在接近構建我的第一個相當大的 WordPress 網站的最後階段,我現在正在遇到一些摩擦。在大多數情況下,網站是在我的本地機器上開發的,我會將更改推送到臨時伺服器進行審查 (see this question for more background) 。解決方案我最終做的很好,當我只是編輯內容,但現在其他人正在編輯的內容,而我還有功能要新增。這個想法是:如果功能和內容相互融合在一起,我們可以更快地完成任務,但現在我不太清楚。
目前,在分段伺服器上的資料庫中存在與本地計算機不同的內容。這是很好的,因為我不需要我的本地機器上的最終身體副本,但我需要做更多的開發,這將影響資料庫 (安裝/寫一些更多的外掛,需要自己的表) 。
我的問題是:
是否有一個簡單的方法來自動化資料庫的合併,以便多個人可以在 WordPress 安裝上工作?當然,我可以匯出我所知道的在本地機器上改變的表,並將它們推送到分段伺服器,但是我可能想要在分段伺服器上放下這些表。我可以抓住這兩個資料庫的 SQL 輸出,並將它們分開… 但是這似乎是乏味和駭客。我想知道這是否是別人解決的問題?如果有一個 community-accepted 方式來處理這種事情。
謝謝!
最佳解決方案
一年前我問過這個問題,在那段時間裡,我們向我們的團隊新增了更多的人,並在 WordPress 中開發了大量的網站。我想透過我們的過程,以防其可能幫助任何人。
一切都在吉特
這是我正在做的事情,即使我提出這個問題,但很高興稱之為這一點。使用 Git 不僅有助於我們提高生產力,而且還節省了我們的集體屁股數次。
您是否需要對網站進行重大的結構改造,從客戶端獲得對這些裝修的批准,並且一直對 non-renovated 版本做出微小的更新?我們有,而 Git 讓我們這樣做。描述這個設定會得到一個 long-winded,但是基礎是我們做了一個新的分支,將該分支拉到伺服器上,並將一個子域附加到該分支。
我們也被 Git 儲存。它當然允許我們回滾更改,這是偉大的,但它也允許我們將舊版本的檔案帶回來。這意味著如果一位客戶問:「記住這一部分網站的工作大概是在一年以前嗎?我們可以帶回來嗎?」 答案是肯定的 – 即使被問及的人每年都不在這個專案上前。
除了這些要點,這也意味著我們永遠不會沒有我們需要的檔案。我們可以隨時從任何機器下載最新版本的站點,並開始進行更改。
使用 Git 進行部署
我們在 Media Temple 上做我們的 WordPress 主機,我們非常喜歡它們。他們不是最便宜的提供商,但他們的服務非常好,他們的伺服器設定得很好。預設情況下也提供 Git 。這意味著我們可以將伺服器設定為 Git 倉庫,並以此方式提取更改,而不是使用 SFTP 。這也意味著在伺服器上進行工作不會被覆蓋的危險 (因為這些更改只能被合併並被推回) 。
因為我們使用 BitBucket 作為我們的 Git 主機,所以需要一些額外的工作。首先我們使用.ssh/config files,以便我們可以輸入像 ssh sitename 這樣的東西來登入我們的伺服器 (我們也使用 passwordless SSH,這使得這個超級容易) 。我們還確保始終使用 ssh passphrases(Mac OS X 使 allowing you to store your passphrase in Keychain.app 非常容易) 。最後,我們將一個 ForwardAgent 行新增到我們要從其中提取的主機上的.ssh /config 條目中。這意味著我們只需要 BitBucket 中每個人的 SSH 公鑰,而不是每個伺服器的公鑰。我們還確保將.git 目錄保留在公共 HTML 目錄之上。
自動資料庫轉儲
一旦伺服器處於生產模式,我們確保 automatically back up our database, just in case 。
每個人都有自己的 wp-config
因為我們都擁有自己的本地資料庫使用者名稱和密碼,並且因為我們可以使用不同的名稱和服務機制,我們每個都保留我們自己的 wp-config 檔案。每個這些都儲存在 Git 中,名稱為 wp-config-gavin.php,當我們想使用該配置時,我們將 symlink 儲存到 wp-config.php(由 Git 使用.gitignore 忽略) 。
這也允許我們覆蓋 wp_options 資料庫表中的 siteurl 選項,如下所示:
define('WP_SITEURL', 'http://sitename.localhost');
define('WP_HOME', 'http://sitename.localhost');
這樣可以防止 WordPress 檢視伺服器位置的資料庫,這意味著本地和伺服器安裝之間的位置並不奇怪。
關於 wp-config.php 檔案的最後一個注意事項:確保 store them above the public HTML directory and make the permissions read only for the web user 。這在保護 WordPress 方面有很大的不同。
資料庫問題
最後,肉的事。
我不得不接受的是,當使用 WordPress 時,沒有好的方法來對”merge” 資料庫進行更改。相反,我們需要制定行為規則來解決這個問題。這些規則是相當簡單的,迄今為止我們已經很好。
在開發過程中,有一個人是”owns” 的網站。那個人通常會進行設定 (將主機包放在一起,啟動 Basecamp 專案,切片設計,那種事情) 。一旦這個人合理點,轉儲資料庫為 WordPress 安裝,並將其放入 Git 。從那時起,所有做開發的人都使用該資料庫轉儲,而所有者是唯一一個對資料庫進行更改的人員。
一旦網站建設進一步發展,網站就放在伺服器上。從那時起,伺服器的資料庫是規範的。每個人 (包括所有者) 必須在伺服器上進行所有資料庫更改,並將更改拖放到本地開發和測試中。
這個過程並不完美。有可能有人可能需要在開發過程中在本地進行 WordPress 後端的更改,然後在生產中再次進行這些更改。然而,我們發現這種事情是罕見的,這個過程對我們來說相當好。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。