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

416 views

Published on

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

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
416
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Grandes Migracoes com o WordPress ¸˜ Passando de qualquer plataforma para o WordPress Vinicius Massuchetto Grandes Migracoes com o WordPress ¸˜ Vinicius Massuchetto
  2. 2. 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
  3. 3. 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
  4. 4. 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
  5. 5. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Motivacao ¸˜ Por que falar sobre migracoes com a equipe de ¸˜ desenvolvimento? • 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
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Migracoes Simples ¸˜ WordPress → WordPress: URLs diferentes • No WordPress, muitas URLs ficam persistentes no banco de dados • Buscar e substituir nao resolve ˜ Grandes Migracoes com o WordPress ¸˜ Vinicius Massuchetto
  11. 11. 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
  12. 12. 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
  13. 13. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Migracoes Simples ¸˜ WordPress → WordPress: URLs diferentes • Para mudanca de URLs deve-se fazer a substituicao ¸ ¸˜ adequadamente, 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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
  23. 23. 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
  24. 24. 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
  25. 25. 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
  26. 26. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Migracoes Complexas ¸˜ Estrutura: Mapeamento Exemplos de mapeamento de estrutura no branch ¸˜ ı wordcamp-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
  27. 27. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Migracoes Complexas ¸˜ Mudanca de tecnologia ¸ Grandes Migracoes com o WordPress ¸˜ Vinicius Massuchetto
  28. 28. 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
  29. 29. 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 de ´ ˆ ¸ m´dias. Veja o arquivo ı wp-includes/ms-files.php Grandes Migracoes com o WordPress ¸˜ Vinicius Massuchetto
  30. 30. 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
  31. 31. 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
  32. 32. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Migracoes Complexas ¸˜ URLs • Para cada conteudo migrado, sempre guardar a referencia ´ ˆ ´ para o conteudo antigo • Na nova estrutura, verificar os meios de acesso no ´ conteudo e redirecionar para o novo. • Casos: • A partir de referencias $ REQUEST ˆ • A partir de regras de URL Grandes Migracoes com o WordPress ¸˜ Vinicius Massuchetto
  33. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. Introducao ¸˜ Motivacao ¸˜ Migracoes Simples ¸˜ Migracoes Complexas ¸˜ Consideracoes finais ¸˜ Consideracoes finais ¸˜ Consideracoes finais ¸˜ • Migracoes devem definitivamente ser inclu´das como ¸˜ ı componentes de projeto • O WordPress oferece um bom conjunto de ferramentas para se trazer dados para dentro de sua estrutura. ´ • E cab´vel o desenvolvimento de plugins espec´ficos para a ı ı manutencao de estruturas legadas. ¸˜ ´ mais cab´vel ainda utilizar estruturas externas de • E ı armazenamento para grandes servicos. ¸ Grandes Migracoes com o WordPress ¸˜ Vinicius Massuchetto

×