Como posso tornar um banco de dados do WordPress portátil e independente de url?

9

Problema

Estou prestes a embarcar em algum desenvolvimento WordPress em um ambiente de equipe multi-pessoa. (3 ou mais pessoas trabalhando na mesma base de código de cada vez, cada uma desenvolvendo localmente)

Com outros CMSs com os quais já trabalhamos, todos apontaram suas instalações no mesmo banco de dados e por causa de como o CMS / banco de dados funcionou, isso significa que todos nós podemos ter o mesmo conteúdo alimentado em nossas instalações (localizados em URLs diferentes) ) do mesmo banco de dados sem muito problema (além de ocasionalmente ter que sincronizar as pastas de uploads)

Minha pergunta é, com o WordPress, o que nos impede de usar essa mesma abordagem e como podemos resolver esses problemas?

por exemplo. Três cópias do WordPress são todas executadas no mesmo banco de dados.

enlace
enlace
enlace

etc

Espero que seja desnecessário dizer que isso será apenas em um ambiente de desenvolvimento antes do lançamento.

Principais problemas

  1. Referências a URLs específicos no banco de dados ( wp_posts e wp_options tabelas, parece)
  2. Se uma pessoa instalar um plug-in, as outras instalações não terão e causarão problemas de simultaneidade no banco de dados
  3. Manter carregamentos de pastas sincronizadas

Solução atual

Atualmente, tenho o início de uma solução para o primeiro problema em vigor. Coloco o seguinte em um arquivo na minha pasta mu-plugins.

O código essencialmente filtra o conteúdo da postagem à medida que entra e sai do banco de dados, substituindo qualquer instância da URL por um token exclusivo.

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

Eu configurei as opções home e siteurl via php usando o ambiente de onde o WordPress está instalado para resolvê-las. (novamente, isso é apenas para desenvolvimento) Isso significa que para cada instalação individual, WordPresses postar conteúdo parecerá que está sendo executado nesse URL no momento em que chegar ao cliente.

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

O segundo e terceiro problemas parecem solucionáveis com os links simbólicos apropriados (todos em desenvolvimento na mesma máquina)

Perguntas reais

  1. Posso melhorar meu manuseio de URLs diferentes de qualquer maneira? Existe alguma coisa que eu perdi que terá o url codificado no banco de dados?

  2. Alguma dica de que eu deveria estar ciente com o symlinking?

  3. Quaisquer outros problemas em que alguém possa pensar?

Sei que essas perguntas são muito específicas, se alguma coisa não estiver clara, comente sobre isso e eu vou corrigir / esclarecer.

Obrigado.

    
por navitronic 17.08.2012 / 09:14

2 respostas

2

Eu responderei a pergunta 2, esteja ciente de que alguns valores no banco de dados são armazenados em matrizes serializadas. Por exemplo, se o tamanho da sua string de URL for alterado e estiver em uma matriz serializada, será necessário atualizar o índice para ela.

Você pode usar este script PHP para atualizar todos os valores em matrizes serializadas ou executá-lo a partir do comando linha no seu próprio script

    
por davemac 22.08.2012 / 02:55
1

Pergunta 1: você tem URLs entrando e saindo do banco de dados em mais lugares do que apenas o conteúdo da postagem. Eu encontrei URLs em *_postmeta , *_comments e *_options (além dos que você definiu). Isso não está contando a atividade do plug-in e a atividade Meta de campo personalizado .

Pergunta 2: Às vezes, também irei ligar simbolicamente plugins por conveniência e, na maioria das vezes, funciona. Às vezes isso não acontece. Não posso dizer as condições exatas que causam um problema, mas o JavaScript parece ser um fator.

Pergunta 3: eu esperaria problemas com a tabela *_options se alguma coisa. Coisas como plugins ativados e o tema ativo são mantidos lá, entre muitas outras informações é bem específico do site.

    
por s_ha_dum 18.10.2012 / 02:56