ฉันจะทำให้ฐานข้อมูล WordPress เป็นแบบพกพาและเป็นอิสระได้อย่างไร


9

ปัญหา

ฉันกำลังจะเริ่มดำเนินการกับการพัฒนา WordPress ในสภาพแวดล้อมแบบทีมหลายคน (3 คนขึ้นไปที่ทำงานบนฐานข้อมูลเดียวกันในแต่ละครั้งพัฒนาในพื้นที่)

ด้วย CMS อื่น ๆ ที่เราทำงานด้วยทุกคนชี้การติดตั้งของพวกเขาที่ฐานข้อมูลเดียวกันและเนื่องจาก CMS / ฐานข้อมูลนั้นทำงานอย่างไรนั่นหมายความว่าเราทุกคนสามารถมีเนื้อหาเดียวกันในการติดตั้งของเรา (ตั้งอยู่ที่ URL ที่แตกต่าง) ฐานข้อมูลเดียวกันโดยไม่มีปัญหามาก (นอกเหนือจากบางครั้งต้องซิงค์โฟลเดอร์ที่อัปโหลด)

คำถามของฉันคือด้วย WordPress สิ่งที่ป้องกันไม่ให้เราใช้วิธีการเดียวกันนี้และเราจะแก้ไขปัญหาเหล่านี้ได้อย่างไร

เช่น. WordPress สามชุดทั้งหมดทำงานจากฐานข้อมูลเดียวกัน

http: //dev.local/developer-a/
http: //dev.local/developer-b/
http: //dev.local/developer-c/

ฯลฯ

ฉันหวังว่ามันจะไปโดยไม่บอกว่าจะอยู่ในสภาพแวดล้อมการพัฒนาก่อนเปิดตัวเท่านั้น

ประเด็นหลัก

  1. การอ้างอิงถึง URL เฉพาะภายในฐานข้อมูล ( wp_postsและwp_optionsตารางที่ปรากฏ)
  2. หากมีคนหนึ่งติดตั้งปลั๊กอินการติดตั้งอื่นจะไม่มีและจะทำให้เกิดปัญหาการทำงานพร้อมกันในฐานข้อมูล
  3. ทำให้โฟลเดอร์ที่อัปโหลดซิงค์อยู่เสมอ

ทางออกปัจจุบัน

ขณะนี้ฉันมีจุดเริ่มต้นของการแก้ปัญหาสำหรับปัญหาแรกที่เกิดขึ้น ฉันวางสิ่งต่อไปนี้ในไฟล์ในโฟลเดอร์ mu-plugins ของฉัน

รหัสจะกรองเนื้อหาโพสต์ตามที่มันเข้าและออกจากฐานข้อมูลโดยแทนที่ตัวอย่างใด ๆ ของ url ด้วยโทเค็นที่ไม่ซ้ำกัน

<?php

define('PORTABILITY_TOKEN', '{_portable_}');

function portability_remove_home($content)
{
    $content = str_replace(get_option('home'), PORTABILITY_TOKEN, $content);

    return $content;
}

add_filter('content_save_pre', 'portability_remove_home');

function portability_add_home($content)
{
    $content = str_replace(PORTABILITY_TOKEN, get_option('home'), $content);

    return $content;
}

add_filter('the_content', 'portability_add_home');
add_filter('the_editor_content', 'portability_add_home');

ฉันได้ตั้งค่าตัวเลือก home และ siteurl ผ่าน php โดยใช้สภาพแวดล้อมของการติดตั้ง WordPress เพื่อใช้งานมัน (อีกครั้งนี่เป็นการพัฒนาเท่านั้น) ซึ่งหมายความว่าการติดตั้ง WordPress แต่ละโพสต์เนื้อหาจะดูเหมือนว่ามันกำลังทำงานบน url นั้นตามเวลาที่ได้รับไปยังไคลเอนต์

<?php
if (!defined('WP_HOME'))
{
    // define WP_HOME (aka url of install) based on environment.
    // IF THIS ISN'T WORKING, DEFINE IT EARLIER.
    define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname(__FILE__) ) );
}

if (!defined('WP_SITEURL'))
{
    // Assumes WordPress is in a separate directory called 'wp', relative to WP_HOME.
    // IF IT'S DIFFERENT, DEFINE IT EARLIER.
    define('WP_SITEURL', WP_HOME . '/wp');
}

ปัญหาที่สองและสามดูเหมือนจะแก้ไขได้ด้วย symlink ที่เหมาะสม (ทั้งหมดพัฒนาบนเครื่องเดียวกัน)

คำถามจริง

  1. ฉันสามารถปรับปรุงการจัดการ URL ที่ต่างกันได้อย่างไร มีอะไรที่ฉันพลาดไปหรือเปล่าที่จะมี urc hardcoded ในฐานข้อมูล?

  2. gotchas ใด ๆ ที่ฉันควรทราบด้วย symlinking?

  3. ปัญหาอื่นใดที่ทุกคนคิดได้

ฉันรู้ว่าคำถามเหล่านี้เฉพาะเจาะจงมากหากมีสิ่งใดไม่ชัดเจนแสดงความคิดเห็นเกี่ยวกับเรื่องนี้และฉันจะแก้ไข / ชี้แจง

ขอบคุณ

คำตอบ:


2

ฉันจะตอบคำถาม 2 โปรดระวังว่าบางค่าในฐานข้อมูลจะถูกเก็บไว้ในอาร์เรย์แบบอนุกรม ตัวอย่างเช่นหากความยาวของสตริง URL ของคุณเปลี่ยนแปลงและอยู่ในอาร์เรย์ต่อเนื่องคุณต้องอัปเดตดัชนีให้

คุณสามารถใช้สคริปต์ PHP นี้เพื่ออัปเดตค่าทั้งหมดในอาร์เรย์ที่ต่อเนื่องกันหรือเรียกใช้จากบรรทัดคำสั่งในสคริปต์ของคุณเอง


ขอขอบคุณล่าช้าที่ชี้ให้ฉันไปในทิศทางของสคริปต์ PHP นั้น แก้ไขปัญหาบางอย่างที่ฉันมีกับงานอื่นที่เกี่ยวข้องกับ WordPress
navitronic

1

คำถามที่ 1: คุณได้รับ URL ที่เข้าและออกจากฐานข้อมูลในสถานที่มากกว่าเนื้อหาโพสต์ ฉันพบ URL ใน*_postmeta, *_commentsและ*_options(นอกเหนือจากURL ที่คุณกำหนดไว้) นี้จะไม่นับกิจกรรมปลั๊กอินและกำหนดเอง Meta สนามกิจกรรม

คำถามที่ 2: บางครั้งฉันก็จะเชื่อมโยงปลั๊กอินเพื่อความสะดวกและใช้เวลาส่วนใหญ่ บางครั้งมันก็ไม่ ฉันไม่สามารถบอกเงื่อนไขที่แน่นอนที่ทำให้เกิดปัญหาได้ แต่ Javascript ดูเหมือนจะเป็นปัจจัย

คำถามที่ 3: ฉันคาดว่าจะมีปัญหากับ*_optionsตารางถ้ามีอะไร สิ่งต่าง ๆ เช่นปลั๊กอินที่เปิดใช้งานและชุดรูปแบบที่ใช้งานอยู่จะถูกเก็บไว้ที่นั่นในหมู่ข้อมูลอื่น ๆ จำนวนมากเป็นเว็บไซต์ที่ค่อนข้างเฉพาะ


คุณพูดถูกในข้อที่ 3 ฉันคิดว่าสิ่งนี้เป็นผลมาจากสิ่งที่ถูกจัดเก็บในรูปแบบต่อเนื่องในตารางนี้ซึ่งอาจแตกถ้าคุณไม่ระวัง
navitronic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.