WordPress 데이터베이스를 이식 가능하고 URL 독립적으로 만들려면 어떻게해야합니까?


9

발행물

여러 사람으로 구성된 팀 환경에서 일부 WordPress 개발을 시작하려고합니다. (한 번에 같은 코드베이스에서 작업하는 3 명 이상의 사람들이 각 지역에서 개발 중)

우리가 함께 작업 한 다른 CMS를 사용하면 모든 사람이 동일한 데이터베이스에서 설치를 지적했으며 CMS / 데이터베이스의 작동 방식으로 인해 동일한 URL에서 다른 URL에있는 동일한 컨텐츠를 설치에 공급할 수 있습니다. 많은 문제없이 동일한 데이터베이스 (업로드 폴더를 동기화 해야하는 경우 제외)

제 질문은 워드 프레스에서 이와 같은 접근 방식을 사용하지 못하게하는 방법과 이러한 문제를 어떻게 해결할 수 있습니까?

예. 동일한 데이터베이스에서 WordPress의 세 복사본이 모두 실행됩니다.

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

기타

이것이 출시되기 전의 개발 환경에서만 가능하다는 것은 말할 나위도 없습니다.

주요 이슈

  1. 데이터베이스 내에서 특정 URL에 대한 참조 ( wp_postswp_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');

WordPress가 설치된 환경을 사용하여 PHP를 통해 home 및 siteurl 옵션을 설정했습니다. (다시 말해서 이것은 개발 전용입니다.) 이것은 각 개별 설치마다 WordPresses 게시물 내용이 클라이언트에 도착할 때마다 해당 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');
}

두 번째와 세 번째 문제는 적절한 심볼릭 링크를 사용하여 해결할 수있는 것처럼 보입니다 (모두 동일한 시스템에서 개발 중)

실제 질문

  1. 어쨌든 다른 URL 처리를 향상시킬 수 있습니까? URL을 데이터베이스에 하드 코딩 할 수있는 부분이 있습니까?

  2. 심볼릭 링크에 대해 알아야 할 점이 있습니까?

  3. 다른 사람이 생각할 수있는 다른 문제?

확실하지 않은 사항이 있으면 이러한 질문이 매우 구체적이라는 것을 알고 의견을 수정하면됩니다.

감사.

답변:


2

질문 2에 답할 것입니다. 데이터베이스의 일부 값은 직렬 배열에 저장되어 있습니다. 예를 들어 URL 문자열의 길이가 변경되고 직렬화 된 배열 인 경우 색인을 업데이트해야합니다.

이 PHP 스크립트 를 사용 하여 직렬화 된 배열의 모든 값을 업데이트하거나 자신의 스크립트에있는 명령 줄에서 실행할 수 있습니다


PHP 스크립트의 방향으로 나를 지적 해 주셔서 감사합니다. 다른 WordPress 관련 작업과 관련된 몇 가지 문제를 해결했습니다.
navitronic

1

질문 1 : 게시물 내용보다 더 많은 곳에서 URL이 데이터베이스로 들어오고 나옵니다. 나는에 URL을 발견 *_postmeta, *_comments*_options(사용자가 정의한 것 외에). 플러그인 활동 및 사용자 정의 메타 필드 활동 은 계산하지 않습니다 .

질문 2 : 때때로 편의를 위해 플러그인을 symlink하고 대부분의 경우 작동합니다. 때로는 그렇지 않습니다. 문제를 일으키는 정확한 조건을 말할 수는 없지만 Javascript는 요인으로 보입니다.

질문 3 : *_options테이블에 문제가있을 것으로 예상 됩니다. 활성화 된 플러그인 및 활성 테마와 같은 것들이 거기에 보관됩니다. 다른 많은 정보 중에서도 사이트에 따라 다릅니다.


당신은 질문 3에 맞습니다. 이것은 주로이 표에 직렬화 된 형태로 저장되어 있기 때문에 생각합니다.주의하지 않으면 깨질 수 있습니다.
navitronic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.