17/03/2012
Eis que resolvi migrar este blog para o Octopress. Usei o Wordpress por anos, e ele me servia bem, mas uma série de fatores me fizeram mudar para o Octopress.
“Mas, Vanzella, o que é o Octopress?”, um leitor talvez me pergunte. E respondo! Octopress é um sistema para blogs baseado no Jekyll. Ele compila arquivos markdown para html puro, belo e válido e envia para o servidor. O sistema tem muitas vantagens: por gerar html puro, ele é seguro e extremamente leve.
Num sistema normal de blog, temos vários vetores para um ataque: O servidor web, o banco de dados, o interpretator PHP (ou ASP, ou a JVM) e o programa em si (como o Wordpress ou o Drupal). Com o Octopress, nós eliminamos a necessidade de três desses vetores no nosso servidor. Tudo o que temos é HTML estático, então um simples httpd (como o Apache ou o nginx) são suficientes.
Páginas estáticas devem ser servidas de maneira estática, esta é uma das máximas da otimização de serviços web. Para atingirmos isso, muitas vezes utilizamos de sistemas de cache e outros artifícios, adicionando mais e mais camadas aos nossos sistemas. O Octopress, no servidor, só tem arquivos estáticos, HTML, CSS, imagens e algum javascript. É tão leve quanto dá.
Estou escrevendo este post em markdown, no VIM, que eu customizei. Sem mais.
Acredito que essa seja a única grande desvantagem do sistema. Não é para qualquer um. O sistema não tem uma página de administração como o Wordpress ou o Drupal. Tudo é feito a partir de rake tasks em uma máquina remota, compilado (ou “baked”, que é o termo moderninho pra coisa) e enviado para o servidor.
“Como funciona essa bagaça?”, vocês me perguntam agora. Digo-vos, pois!
Dado que já tenhamos o sistema configurado e funcionando localmente (e, para isso, leiam a documentação, muda de acordo com as necessidades de vocês.), criamos um novo post com um rake new_post["Nome do post, entre aspas, exatamente como queremos que apareça"]. Um arquivo novo será criado e o sistema vai dizer onde. Edite ele, conforme quiser e compile com rake generate. Se você usar algo como o pow, pode usar rake watch para recompilar a cada vez que o arquivo for salvo. Depois, que estiver contente com o estado do post, só fazer deploy, de acordo com seu setup. Eu uso rsync, então, para mim, é rake deploy. Pronto: novo post no ar.
Mas eu tinha três anos de baboseira neste blog, e não queria perder. Alguns posts me dão até vergonha, outros uma pontinha de orgulho, e outros são realmente úteis para muita gente. O mesmo vale para os comentários. Tinha que dar um jeito de migrar tudo.
Vamos fazer isto primeiro, porque demora um pouquinho.
O Octopress usa o Disqus para comentários, já que ele só serve arquivos estáticos. Primeiro, então, temos que exportar todos nossos comentários para o Disqus.
Instale o plugin do Disqus no Wordpress e siga as instruções de como exportar os comentários. É questão de clicar em dois ou três botões.
Não se esqueça de modificar o _config.yml do octopress para refletir a estrutura de permalinks do blog antigo, o Disqus não vai gostar se você mudar a URL dos posts. Coloque também o shortname do seu blog lá, na parte respectiva ao Disqus.
Esse processo vai demorar um tempinho, dependendo de quantos comentários tiver, então paciência. Pode seguir adiante enquanto isso termina.
Por sorte, o Wordpress nos dá uma ferramenta de exportação de conteúdo, num belo XML. O exitwp pega este XML e gera um markdown para cada post e página estática do blog antigo, exatamente como o Octopress gosta. Copie esse monte de tralha para a árvore do seu novo blog.
Suponho, se você está lendo isso, que você fala português. Chances são que seu blog também está em português (ainda que, talvez, não um bom português). Provavelmente isso fez com que seus markdowns estivessem em UTF-8, e talvez você tenha uma mensagem de erro como esta:
pedrovanzella@Fenrir[ruby-1.9.2-p290@octopress]:~/Code/blog_ppvanzella git:(master*) $ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
Configuration from /Users/pedrovanzella/Code/blog_ppvanzella/_config.yml
Building site: source -> public
/Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/gems/jekyll-0.11.0/lib/jekyll/convertible.rb:29:in `read_yaml': invalid byte sequence in US-ASCII (ArgumentError)
from /Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/gems/jekyll-0.11.0/lib/jekyll/post.rb:39:in `initialize'
from /Users/pedrovanzella/Code/blog_ppvanzella/plugins/preview_unpublished.rb:23:in `new'
from /Users/pedrovanzella/Code/blog_ppvanzella/plugins/preview_unpublished.rb:23:in `block in read_posts'
from /Users/pedrovanzella/Code/blog_ppvanzella/plugins/preview_unpublished.rb:21:in `each'
from /Users/pedrovanzella/Code/blog_ppvanzella/plugins/preview_unpublished.rb:21:in `read_posts'
from /Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/gems/jekyll-0.11.0/lib/jekyll/site.rb:128:in `read_directories'
from /Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/gems/jekyll-0.11.0/lib/jekyll/site.rb:98:in `read'
from /Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/gems/jekyll-0.11.0/lib/jekyll/site.rb:38:in `process'
from /Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/gems/jekyll-0.11.0/bin/jekyll:250:in `<top (required)>'
from /Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/bin/jekyll:19:in `load'
from /Users/pedrovanzella/.rvm/gems/ruby-1.9.2-p290@octopress/bin/jekyll:19:in `<main>'
{% endcodeblock %}
Nem vou entrar em muitos detalhes de por que isto acontece. Basta saber que a solução é relativamente fácil. Coloque isto no seu script de inicialização da shell (`~/.bashrc` ou `~/.zshrc`):
{% codeblock lang:bash %}
export LC_CTYPE=en_US.UTF-8
export LANG=en_US.UTF-8
{% endcodeblock %}
#### Reativando os comentários
O exitwp, infelizmente, ao criar os markdowns, esqueceu de colocar `comments: true` neles, o que significa que os comentários estão desativados para todos os posts. Consertar isso também é fácil. Rode isto no diretório dos posts no seu octopress (script para zsh. Para bash deve ser levemente diferente):
{% codeblock lang:bash %}
foreach i (*.markdown) perl -p -i -e 'print "comments: true\n" if /status: publish/' $i; end
Todas as imagens que estavam linkadas nos seus posts do wordpress vieram com caminho absoluto nos novos posts. Isso facilita a nossa vida, caso queiramos fazer uma gambiarra (e quem não quer?).
Copie todo seu wp-content/uploads para a pasta source do seu octopress. Ao compilar o site, ela será copiada para a pasta pública e todas as imagens manterão suas URLs e nada ficará quebrado nos posts.
A princípio, está tudo pronto. Talvez você queira recuperar as páginas, também. Não é difícil, o exitwp também converteu elas. Este é o estágio que este blog está hoje. Dá para ver que alguns posts antigos ficaram um pouco feios, porque o exitwp não sabia o que fazer com algumas tags que o wordpress usava, ou alguma gambiarra que eu fiz no passado. O melhor é revisar todos os posts, editar eles e consertar. De novo, a documentação é sua amiga.
Outra coisa que todo mundo deveria fazer é manter o octopress em um repositório do git. Mais uma vez, a documentação explica exatamente como (e varia para cada pessoa, não vou repetir aqui).
Qualquer dúvida, deixe um comentário aí que vejo no que posso ajudar.
blog comments powered by Disqus