Grandes migrações: Indo de qualquer plataforma para o WordPress

36
Introduc ¸˜ ao Motivac ¸˜ ao Migrac ¸˜ oes Simples Migrac ¸˜ oes Complexas Considerac ¸˜ oes finais Grandes Migrac ¸˜ oes com o WordPress Passando de qualquer plataforma para o WordPress Vinicius Massuchetto Grandes Migrac ¸˜ oes com o WordPress Vinicius Massuchetto

description

Apresentação que trata sobre os diferentes tipos de migração no WordPress, tanto as nativamente suportadas quanto aquelas que precisam ser codificadas.

Transcript of Grandes migrações: Indo de qualquer plataforma para o WordPress

Page 1: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Grandes Migracoes com o WordPressPassando de qualquer plataforma

para o WordPress

Vinicius Massuchetto

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 2: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Introducao

Download

Codigo fonte da apresentacao:https://github.com/vmassuchetto/wp-migrations

(branch intercon)

PDF compilado:http://tinyurl.com/latinoware2013-wp2

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 3: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Introducao

Sobre o que falaremos

1 Introducao

2 Motivacao

3 Migracoes Simples

4 Migracoes Complexas

5 Consideracoes finais

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 4: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Motivacao

Por que falar sobre migracoes com o cliente?

• Indexacao de conteudo• Manutencao de usabilidade• Reestruturacao do conteudo

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 5: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Motivacao

Por que falar sobre migracoes com a equipe dedesenvolvimento?

• Analise de complexidade• Analise de correlacao e criacao de estruturas• Resolucao de velhos problemas• Definicao de estrategias• Delegacao de tarefas• Elaboracao de manuais• Definicao do tempo de projeto

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 6: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Motivacao

E na verdade, as migracoes sao..

• Uma etapa de projeto que poderia ser melhor discutida• Uma das partes mais importantes da implantacao de

projetos web

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 7: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

O que sao migracoes para o WordPress?

• WordPress→WordPress• Plataformas Suportadas→WordPress• Outras Plataformas→WordPress

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 8: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: Mesma URL

• Copiar a base• Modificar o wp-config.php

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 9: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: Mesma URL

mysqldump -u user -ppass db | bzip2 > dump.sql.bz2

scp dump.sql.bz2 user@host:˜/

ssh user@host "bunzip2 -c dump.sql.bz2 | mysql -uuser -ppass db"

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 10: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

• No WordPress, muitas URLs ficam persistentes no bancode dados

• Buscar e substituir nao resolve

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 11: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

$meta_value = array (

"key1" => "test1",

"key2" => "test2",

"url" => "http://example.com"

);

add_post_meta( $post_id, "meta_key", $meta_value );

a:3:{

s:4:"key1";s:5:"test1";

s:4:"key2";s:5:"test2";

s:3:"url";s:18:"http://example.com";

}

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 12: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

a:3:{

s:4:"key1";s:5:"test1";

s:4:"key2";s:5:"test2";

s:3:"url";s:18:"http://example2.com";

}

$meta_value = get_post_meta( $post_id, "meta_key" );

array(1) {

[0]=>

bool(false)

}

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 13: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

• Para mudanca de URLs deve-se fazer a substituicaoadequadamente, via plugin ou script

• Exemplos:• Linha de comando: WP-CLI, WP-CLI-Migrate• Scripts: searchreplacedb2.php, migra bd.php• Plugins: WordPress Move, Search and Replace, WP

Migrate Tool

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 14: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

mysqldump -u user -ppass db | bzip2 > dump.sql.bz2

scp dump.sql.bz2 user@host:˜/

ssh user@host "bunzip2 -c dump.sql.bz2 | mysql -uuser -ppass db"

e..

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 15: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

TABLES=""

for T in ‘mysql -u user -ppass db -N -s -e "SHOW TABLES"‘; do

TABLES="tables[]=${TABLES}&"

done

SEARCH="http://example.com"

REPLACE="http://otherexample.com"

ACCESS="user=${USER}&pass=${PASS}&host=${HOST}&data=${DB}"

DATA="${TABLES}&${ACCESS}&srch=${SEARCH}&rplc=${REPLACE}"

curl -d "$DATA" http://host/searchreplacedb2.php?step5

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 16: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

a:3:{

s:4:"key1";s:5:"test1";

s:4:"key2";s:5:"test2";

s:3:"url";s:23:"http://otherexample.com";

}

$meta_value = get_post_meta( $post_id, "meta_key" );

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 17: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

WordPress→WordPress: URLs diferentes

array(1) {

[0]=>

array(3) {

["key1"]=>

string(5) "test1"

["key2"]=>

string(5) "test2"

["url"]=>

string(23) "http://otherexample.com"

}

}

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 18: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Simples

Plataformas suportadas

• Blogger• LiveJournal• Movable Type• RSS• Tumblr• Plugins . . .

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 19: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Topicos a serem levados em conta

• Tecnologia• Estrutura• Referencias e relacoes internas• Conteudo• Mıdias• URLs

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 20: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Tecnologias empregadas

• Configuracao dos servidores(safe mode, parametros de compilacao)• ini set( ’memory limit’, -1)• set time limit( 0 )• ou.. ajax recursivo

• Modo de obtencao de dados (socket, webservice, csv)• Linguagem a serem escritos os scripts de migracao• Preferencia: PHP, MySQL, de dentro do WordPress

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 21: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Tecnologias empregadas

• Migrar atraves do proprio WordPress:• Facilidade e padronizacao de manipulacao dos dados• Garantia de integridade

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 22: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Tecnologias empregadas: wpdb

• Classe wpdb• query()• get results()• get var()

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 23: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Tecnologias empregadas: wpdb

ini set( ’memory limit’, -1);

set_time_limit( 0 );

include( ’wp-load.php’ );

// !!!

global $wpdb;

$external_db = new wpdb( IMPORT_USER, IMPORT_PASS,

IMPORT_DB, IMPORT_SERVER );

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 24: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Tecnologias empregadas: Abstracao de banco

• Funcoes de relacao com o banco de dados:• wp insert post()• wp insert term()• wp set post terms()• wp insert attachment()• wp update attachment metadata()• update post meta()

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 25: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Tecnologias empregadas: Exemplo de rotina

$external_db = new wpdb( .. );

$sql = "

SELECT ...

FROM ...

";

foreach ( $external_db->get_results( $sql ) as $p ) {

/* formatacao de $post_attrs com base em $p */

wp_insert_post( $post_attrs );

}

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 26: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Estrutura: Mapeamento

Exemplos de mapeamento de estrutura no branchwordcamp-ctba-2012 Solucoes possıveis:• Taxonomia como relacoes• post parent

• Custom fields• Plugin (Advanced Custom Fields, Posts2Posts)• Outras tecnologias de armazenamento

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 27: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Mudanca de tecnologia

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 28: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Tratamento de conteudo

• Funcoes de tratamento:• remove accents()• sanitize title()• normalize whitespace()• make clickable()• capital P dangit()

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 29: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Migracao de Mıdias: Servico Dinamico

• Ao inves do download pode-se fazer o servico dinamico demıdias. Veja o arquivowp-includes/ms-files.php

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 30: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Migracao de Mıdias: Servico Dinamico

http://exemplo.com/imagens/foto.jpg

RewriteRule $ˆ$(.*/)?imagens/(.*)

wp-includes/ms-files.php?file=$2 [L]

http://exemplo.com/wp-includes/ms-files.php?file=foto.jpg

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 31: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

Migracao de Mıdias: Servico Dinamico

$file = $_GET[’file’]

header( ’Content-Type: ’ . $mimetype );

header( ’Content-Length: ’ . filesize( $file ) );

header( ’X-Accel-Redirect: ’

. str_replace( WP_CONTENT_DIR, ’’, $file ) );

header( ’X-Sendfile: ’ . $file );

readfile( $file );

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 32: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

URLs

• Para cada conteudo migrado, sempre guardar a referenciapara o conteudo antigo

• Na nova estrutura, verificar os meios de acesso noconteudo e redirecionar para o novo.

• Casos:• A partir de referencias $ REQUEST• A partir de regras de URL

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 33: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

URLs: Referencias $ REQUEST

add_action( ’wp’, ’check_migrated’ );

function check_migrated() {

if ( !isset( $_REQUEST[’old_website_id’] ) )

return false;

if ( $new_post = get_post_from_old_id(

$_REQUEST[’old_website_id’] ) )

wp_redirect( get_permalink( $new_post->ID ) );

return false;

}

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 34: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

URLs: Referencias a partir de regras

/* URL a ser migrada */

http://example.com/old_id/123

/* Escolher uma variavel para identificar este padrao */

add_action( ’query_vars’, ’add_query_vars’ );

function add_query_vars( $vars ) {

array_push( $vars, ’old_id’ );

return $vars;

}

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 35: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Migracoes Complexas

URLs: Referencias a partir de regras

/* Adiciona a regra no set de regras */

add_action( ’rewrite_rules_array’, ’rewrite_rules’ );

function rewrite_rules( $rules ) {

$new_rules = array(

’old_id/(.+?)/?$’

);

return $rules + $new_rules;

}

Grandes Migracoes com o WordPress Vinicius Massuchetto

Page 36: Grandes migrações: Indo de qualquer plataforma para o WordPress

Introducao Motivacao Migracoes Simples Migracoes Complexas Consideracoes finais

Consideracoes finais

Consideracoes finais

• Migracoes devem definitivamente ser incluıdas comocomponentes de projeto

• O WordPress oferece um bom conjunto de ferramentaspara se trazer dados para dentro de sua estrutura.

• E cabıvel o desenvolvimento de plugins especıficos para amanutencao de estruturas legadas.

• E mais cabıvel ainda utilizar estruturas externas dearmazenamento para grandes servicos.

Grandes Migracoes com o WordPress Vinicius Massuchetto