Làm cách nào để tạo cơ sở dữ liệu WordPress di động và url độc lập?


9

Vấn đề

Tôi sắp bắt tay vào phát triển WordPress trong môi trường nhóm nhiều người. (3 người trở lên làm việc trên cùng một codebase tại một thời điểm, mỗi người phát triển cục bộ)

Với các CMS khác mà chúng tôi đã làm việc cùng, mọi người đã chỉ ra các cài đặt của họ tại cùng một cơ sở dữ liệu và vì cách mà CMS / cơ sở dữ liệu đó hoạt động, điều đó có nghĩa là tất cả chúng ta đều có thể cung cấp cùng một nội dung cho các cài đặt của mình (nằm ở các url khác nhau) từ cùng một cơ sở dữ liệu mà không có nhiều vấn đề (ngoài việc thỉnh thoảng phải đồng bộ hóa các thư mục tải lên)

Câu hỏi của tôi là, với WordPress, điều gì ngăn chúng ta sử dụng cách tiếp cận tương tự này và làm thế nào chúng ta có thể giải quyết những vấn đề này?

ví dụ. Ba bản sao của WordPress đều chạy trên cùng một cơ sở dữ liệu.

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

Vân vân

Tôi hy vọng rằng không cần phải nói rằng điều này sẽ chỉ trong một môi trường phát triển trước khi ra mắt.

Vấn đề chính

  1. Tham chiếu đến các url cụ thể trong cơ sở dữ liệu ( wp_postswp_optionsdường như các bảng)
  2. Nếu một người cài đặt một plugin, các cài đặt khác sẽ không có nó và sẽ gây ra sự cố đồng thời trong cơ sở dữ liệu
  3. Giữ các thư mục tải lên đồng bộ hóa

Giải pháp tạm thời

Hiện tại tôi có sự khởi đầu của một giải pháp cho vấn đề đầu tiên tại chỗ. Tôi đặt các mục sau trong một tệp trong thư mục mu-plugins của mình.

Mã về cơ bản lọc nội dung bài đăng khi nó đi vào và ra khỏi cơ sở dữ liệu bằng cách thay thế bất kỳ trường hợp nào của url bằng mã thông báo duy nhất.

<?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');

Tôi đã thiết lập các tùy chọn home và siteurl thông qua php bằng cách sử dụng môi trường nơi WordPress được cài đặt để xử lý chúng. (một lần nữa, đây chỉ dành cho phát triển) Điều này có nghĩa là với mỗi cá nhân cài đặt, nội dung bài đăng của WordPress sẽ trông giống như nó đang chạy trên url đó vào thời điểm nó đến máy khách.

<?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');
}

Các vấn đề thứ hai và thứ ba dường như có thể giải quyết được với các liên kết tượng trưng thích hợp (tất cả đều phát triển trên cùng một máy)

Câu hỏi thực tế

  1. Tôi có thể cải thiện việc xử lý các url khác nhau không? Có bất cứ điều gì tôi đã bỏ lỡ sẽ có url được mã hóa cứng vào cơ sở dữ liệu?

  2. Bất kỳ vấn đề nào tôi cần lưu ý với symlinking?

  3. Bất kỳ vấn đề khác bất cứ ai có thể nghĩ về?

Tôi nhận ra những câu hỏi này rất cụ thể, nếu có gì không rõ ràng, hãy bình luận về điều này và tôi sẽ sửa đổi / làm rõ.

Cảm ơn.

Câu trả lời:


2

Tôi sẽ trả lời câu hỏi 2, lưu ý rằng một số giá trị trong cơ sở dữ liệu được lưu trữ trong các mảng nối tiếp. Ví dụ: nếu độ dài của chuỗi URL của bạn thay đổi và nó nằm trong một mảng được tuần tự hóa, thì bạn cần cập nhật chỉ mục cho nó.

Bạn có thể sử dụng tập lệnh PHP này để cập nhật tất cả các giá trị trong các mảng được tuần tự hóa hoặc chạy nó từ dòng lệnh trong tập lệnh của riêng bạn


Một lời cảm ơn muộn màng đã chỉ cho tôi theo hướng của kịch bản PHP đó. Nó đã giải quyết một vài vấn đề tôi gặp phải với một nhiệm vụ khác liên quan đến WordPress.
hải quân

1

Câu hỏi 1: Bạn đã có URL đi vào và ra khỏi cơ sở dữ liệu ở nhiều nơi hơn là chỉ nội dung bài đăng. Tôi tìm thấy URL trong *_postmeta, *_comments*_options(ngoài những người bạn định nghĩa). Đây không phải là tính hoạt động của plugin và hoạt động Trường Meta Custom .

Câu hỏi 2: Đôi khi tôi cũng sẽ bổ sung các liên kết symlink để thuận tiện và hầu hết thời gian nó hoạt động. Đôi khi nó không. Tôi không thể cho bạn biết các điều kiện chính xác gây ra sự cố nhưng Javascript dường như là một yếu tố.

Câu hỏi 3: Tôi sẽ gặp rắc rối với *_optionsbảng nếu có bất cứ điều gì. Những thứ như plugin kích hoạt và chủ đề hoạt động được giữ ở đó, trong số rất nhiều thông tin khác là trang web cụ thể.


Bạn đã đúng với câu hỏi 3, tôi nghĩ rằng điều này chủ yếu là do những thứ được lưu trữ ở dạng tuần tự trong bảng này, có thể bị hỏng nếu bạn không cẩn thận.
hải quân
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.