博客迁移记

说起我的小博客的历史啊真的很久了。最早之前是在10年暑假,那时候自己学习ACM,在POJ上面做题目。每天都做几道,当时想着把好不容易把这些题目写出来,到时过不了多久在看到的时候就忘了,这样多浪费啊,于是我开始谋划我的博客,当时wordpress很火,我也就开始了我的博客生涯,买了个90元的博客主机,买了个域名,开始了我的做题笔记。

后来在12年的时候,那时学习python,准备往web方向走,虽然django的文档还是很多,但是必定需要一个实际项目入手,我决定将我的博客重写,于是用django实现了一个版本,写出第一版后就没怎么改过了,现在在去看我当时写的代码,真的是很不规范,很多代码现在我都看不下去,不过必定是我的一个作品,呵呵。具体项目在JoveSky,虽然这是我的地一个django项目,但是相对来说很多功能都实现了,当初选择markdown作为书写格式,也为这次迁移减少了很多麻烦。

当初python的那个版本,一直挂在我朋友的SAE上,也就一直没要钱,但是不知道怎么回事,速度很不稳定,后来想想,其实我的博客,真的也只有文字,那么还是专注于写作吧,于是我选择了使用静态博客。既然是静态博客,当然要找一个python写的了,(不行就自己写个,^_^)

搜索了半天,找到了python的wiki,https://wiki.python.org/moin/StaticSiteGenerator

简单看了下有一些不错的,其中我比较有名的是Pelican,但是他的模板渲染用的是jinja2,这个我不是很熟,最近跟转到后台那边去了,也正好在用mako,所以想找个mako模板的后面我该起自己的主题也方便一些,最后找了半天选择了Nikola,选择他书要有3个原因

  1. 调试方便,自带开发服务器,还可以通过插件实现实时检测文件变化。
  2. 方便部署到github page,他提供了一个自动化部署的命令,我看了下源码,就是帮你执行了一些命令,向我这样的自然要偷懒。
  3. 模板嵌套不错,我看了下他的默认模板,写的非常不错,我没看过别的,也不知道应该是什么水平,不过看着顺眼就好。

迁移过程

迁移文章

我之前django博客中,是用markdown来书写,所有文章都在数据库内,现在要都迁移出md文件,首先我去SAE中的数据库导出,其实可以到处成XML或这YAML但是我没这么麻烦,直接到处成SQL,然后导入了我本地的mysql,自己书写了个脚本来完成将文章变成文件的工作。简单晒下我的脚本吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-

import MySQLdb
import os

conn = MySQLdb.connect(host='127.0.0.1',user='qf',passwd='123456',charset='utf8' )
cur = conn.cursor()

conn.select_db('qf_core')

count = cur.execute('select title,slug,create_time,markdown from blog_post')

result=cur.fetchall()

template = """<!--
.. title: %s
.. id: %s
.. slug: %s
.. date: %s+08:00
.. tags:
.. link:
.. description:
.. type: text
-->

"""

for r in result:
title = r[0]
slug = r[1]
time = r[2]
markdown = r[3]
f = open('%s.md'%title,'wb')

f.write(unicode.encode(template%(title,slug,time.strftime('%Y-%m-%dT%H:%M:%S')),'utf-8'))
f.write(unicode.encode(markdown,'utf-8'))

这样我们就看到了一文件夹的文章,python做这种小工具真心简单。

集成多说评论

之前我所有的系统都是使用多说评论,无论是我的wordpress还是django,多说做的是真不错,但是这个框架必定是老外写的,其中集成了disqus,我参考disqus的实现将多说集成进去,找到源码中的comments_helper_disqus.tmpl,参考他我完成了comments_helper_duoshuo.tmpl源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
## -*- coding: utf-8 -*-
<%def name="comment_form(url, title, identifier)">
%if comment_system_id:
<!-- 多说评论框 start -->
<div class="ds-thread" data-thread-key="${identifier}" data-title="${title}" data-url="${url}"></div>
<!-- 多说评论框 end -->
<!-- 多说公共JS代码 start (一个网页只需插入一次) -->
<script type="text/javascript">
var duoshuoQuery = {short_name:"${comment_system_id}"};
(function() {
var ds = document.createElement('script');
ds.type = 'text/javascript';ds.async = true;
ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
ds.charset = 'UTF-8';
(document.getElementsByTagName('head')[0]
|| document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script>
<!-- 多说公共JS代码 end -->
%endif
</%def>

<%def name="comment_link(link, identifier)">
%if comment_system_id:
<a href="${link}#ds-thread">Comments</a>
%endif
</%def>


<%def name="comment_link_script()">
%if comment_system_id:
%endif
</%def>

部署

其实这个最好的部署环境是github page,但是大天朝你懂得,好在国内有很多良心企业,比如托总的gitcafe,稍微修改了下,我就将整个博客部署到上去

写在最后

博客是我技术的一个载体,真的记载了我从开始接触真正的技术到后来的练习的过程,我博客的变迁,也是我成熟的过程,我相信我的小博客不会就这么接触,也许还会有下一次迁移,倒是折腾吧!