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
- Tham chiếu đến các url cụ thể trong cơ sở dữ liệu (
wp_posts
vàwp_options
dường như các bảng) - 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
- 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ế
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?
Bất kỳ vấn đề nào tôi cần lưu ý với symlinking?
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.