В связи с недавними новостями о закрытии Google Reader, решил всё-таки начать отвязываться от облачных серверов. В принципе, так как кроме блога я ничего не размещаю на чужих ресурсах, он и стал сегодняшней утренней жертвой. Да и вообще tumblr явно не совпадает с моим видением блогоплатформы.
Сама по себе миграция очень проста, если не брать в расчет некоторые подводные камни:
$ gem install jekyll
$ jekyll new blog
$ ruby -rubygems -e 'require "jekyll/migrators/tumblr"; Jekyll::Tumblr.process("http://www.your_blog_url.com")'
Но дьявол, как известно, в деталях :)
Проблема номер раз: jekyll говорил при попытке импорта 404. Как оказалось, тут всё просто, имя блога необходимо обязательно указывать без /
в конце :)
Проблема номер два: после указания правильного URL для jekyll, уже ruby ругался на непонятный метод at
, который применяется к хешу (что-то вроде undefined method 'at' for #<Hash
). Что это и зачем он там - неясно. Правим исходники (lib/ruby/gems/2.0.0/gems/jekyll-import-0.1.0.beta1/lib/jekyll/jekyll-import/tumblr.rb
) руками:
if !post["id3-title"].nil?
title = post["id3-title"]
content = post.at["audio-player"] + "<br/>" + post["audio-caption"]
else
title = post["audio-caption"]
content = post.at["audio-player"]
end
заменяем на
if !post["id3-title"].nil?
title = post["id3-title"]
content = post["audio-player"] + "<br/>" + post["audio-caption"]
else
title = post["audio-caption"]
content = post["audio-player"]
end
Проблема номер три: при попытке импорта в markdown выскакивает вот такая ошибка: in 'gsub!': invalid byte sequence in UTF-8
. Как оказалось, html2text, который нужен для импорта в markdown, не умеет работать с UTF-8 без патчей. Решение - отказаться от импорта в markdown :)
Проблема номер четыре, которая хоть и не проблема вовсе, но напрягает: адреса постов после импорта имели страшный вид (---_--_.html
, примерно такой). Я это поправил быстропатчем:
Шаг 1. Устанавливаем gem russian
$ gem install russian
Шаг 2. Правим код, добавляя транслитерацию заголовка
# В начало
require 'russian'
# В район 100-й строки, где генерируется slug
# заменяем slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') на
slug = Russian.translit(title).downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
Собственно, на этом проблемы заканчиваются, и можно спокойно использовать jekyll.
Комментарии