存档

‘micolog’ 分类的存档

为micolog增加热门文章功能

2009年7月30日 闫鹏 6 条评论

micolog实际上是输出了最近的5篇文章的,但是对我们来说,首页上已经显示了,最近文章这个功能就有些鸡肋。弄个热门文章或者随机推荐可能更加实用一些。

要整这个功能,你最好已经为micolog增加了阅读次数统计的功能,要不当blog上面的评论比较少的时候用起来可能不是非常满意(我的这个倒是热门里面都是因为评论多哈)

1.在model.py文件中的类Blog中,大概是138行的那个def recentposts(self):函数下面(return下面啊),增加函数(注意缩进,要与recentposts对齐):

[code lang='python' style='vs']

def hotposts(self, num = 7):
    return Entry.all().filter('entrytype =', 'post').order('-commentcount').order('-readtimes').fetch(num)

[/code]

2.在index.yaml文件中,增加

[code lang='yaml' style='vs']

- kind: Entry
   properties:
      - name: entrytype
      - name: commentcount
   direction: desc
       - name: readtimes
          direction: desc

[/code]

3.修改你的模板文件(template里面的那些html),在你需要的地方增加

[code lang='django' style='vs']

{%endfor%}

  {% for entry in blog.hotposts %}

{{entry.title}}

[/code]

 

 

注意,如果你没有增加阅读次数统计的功能,是没有readtimes变量的,上面的代码会出错。

将代码更新到GAE上面后,要耐心等待10分钟才能见到效果,如果直接访问一定是500错误,连blog首页都访问不了(我前一阵子一直因为这个,反复修改代码上传,浪费了不少时间)。

分类: micolog 标签:

修正micolog文章中前一post与后一post的混乱问题

2009年7月24日 闫鹏 6 条评论

yanjingtu童鞋留言说,文章详情页中的上一篇与下一篇是不正确的,问能不能修复,我观察了一下,发现模板中用的是entry的next属性与prev属性。所以就跑到model.py去查看,果然徐老大的代码是按照post_id来排序而不是时间。

此文章是在踩坑后极度郁闷的情况下写的,不喜欢废话的童鞋请直接看红色字

想着改起来也很简单啦,就是把model.py文件中大概406行的函数体改成

[code lang='python' style='vs']

return Entry.all().filter('entrytype =','post').filter('published =', True).order('date').filter('date >', self.date).fetch(1)

[/code]

大概414行改成

[code lang='python' style='vs']

return Entry.all().filter('entrytype =','post').filter("published =", True).order('-date').filter('date <',self.date).fetch(1)

[/code]

本以为上传后就ok了呢,结果……苍天啊,大地啊,万恶的google啊,点击详情页总是返回500。尝试只修改414行那个就没问题,一修改406行那个就500。最后实在不明白咋回事了,只好乱翻google的文档(虽然这个还从来没有好好看过一遍),后来发现里面有个索引配置,不会如果没配置索引,google就拒绝查询请求吧。于是查找index.yaml文件,发现里面确实是有一条索引正好能用的
[code lang='yaml' style='vs']

- kind: Entry
   properties:
   - name: entrytype
   - name: published
   - name: date
      direction: desc

[/code]

但是direction只能满足要修改的414行查询,不能满足要修改的406行查询,难道建的索引还这么傻?于是在index.yaml中添加

[code lang='yaml' style='vs']

- kind: Entry
   properties:
   - name: entrytype
   - name: published
   - name: date

[/code]

又试了一下,问题解决(如果你的数据多,可能在短时间内会出现500错误,稍等2分钟应该就会好),看来google这个真的弄得那么傻…今天算是踩到大坑上了,以后一定要把文档仔细看一遍,整整两个小时啊

感谢yanjingtu同学报的两个bug~~,另外这个页面ie6下错位的问题我手头没有ie6,先等一段时间改哈

分类: micolog 标签:

修正micolog atom feed更新问题

2009年7月21日 闫鹏 没有评论

最近使用friendfeed跟踪micolog的feed,发现总是无法更新,用浏览器却是正常的。观察浏览器抓出来的xml,那些update时间也都是正确的,但friendfeed与msn space都不能更新,确认问题肯定是在这里。

在网上查了半天,也没有找到这个xml标准是哪个rfc,只好参照其他能更新的feed进行对比。随后发现在micolog生成的xml中,每个entry的id都是相同的。

观察micolog\views\atom.xml,发现第15行:

[code lang='django' style='vs']

{{ blog.baseurl }}/entry/{{entry.slug}}

[/code]

因为我用live writer写的内容,每个文章都没有设置slug,而这个东东默认配置是空的。再考虑friendfeed只是在第一次抓取的时候出来的一篇,剩下的再也不更新了,认为问题可能就在这里,于是改成

[code lang='django' style='vs']

{{ blog.baseurl }}/entry/{{entry.post_id}}

[/code]

然后到friendfeed上,强制刷新一下,新发布的文章就出来了。

最开始考虑可能服务再抓的时候是用feed标签下的update来识别的,没想到用的是id,真是个坑啊

分类: micolog 标签:

为micolog增加阅读次数统计

2009年7月20日 闫鹏 2 条评论

操作起来还是挺简单的,修改下面几个文件,注意python的缩进,别出现错误

1)文件:model.py

在class Entry(BaseModel):下给Entry添加一个属性:

[code lang='python' style='vs']

readtimes = db.IntegerProperty(default=0)

[/code]

这个就是阅读次数的变量,默认为0。增加这个属性不会对原有的文章造成任何影响,不用担心。

2)文件:blog.py

文件头部,31行下面的位置,插入一个专门用来增加阅读次数的函数。

[code lang='python' style='vs']

def addReadTime(entry):
entry.readtimes += 1
entry.put()

[/code]

在”fetch(self.blog.posts_per_page, offset = page * self.blog.posts_per_page)”下面(上面插入后,大约在63行)插入。注意对齐,for是要与上面的entries保持列对齐的(即f字母与e字母在同一列上)。插入这个是表示访问blog首页后,所有展示出来的文章阅读次数都加一

[code lang='python' style='vs']

for entry in entries:
addReadTime(entry)

[/code]

在”entry = entries[0]”(大约130行)下面,插入。注意addReadTime要与entry对齐

[code lang='python' style='vs']

addReadTime(entry)

[/code]

加上这个为了使每个单独阅读的post也对阅读次数加一

3)文件:themes\default\templates\index.html

在posted后面增加

[code lang='django' style='vs']

readed:{{entry.readtimes}}

[/code]

这样,在首页的文章列表中就会多了一个阅读次数的信息了。

4)文件:themes\default\templates\single.html

在posted后面增加

[code lang='django' style='vs']

readed:{{entry.readtimes}}

[/code]

使用appcfg.py的 update代码到服务器上试试吧:)

不知道怎么更新的看这里

分类: micolog 标签:

用google app搭建micolog作为blog并且绑定域名

2009年7月9日 闫鹏 28 条评论

micolog已经发展到0.5版了,又有google app的免费服务使用,在google app上搭建了micolog来作为blog服务器就成了一个不错的选择。但目前存在的问题就是万一那一天被墙了,就比较囧….

部署blog服务

1. 首先需要到google app engine上面注册一个新账号。随后点击登录页面后的”Create an Application”创建一个新的应用,例如取名字叫yanpblog。创建的应用会有自己的url可以访问,如:yanpblog.appspot.com

2. 下载App Engine SDK并进行安装,安装的时候要注意,sdk会提示要求安装python2.5.x的版本,如果系统中没有,别忘了装上。

3. 下载micolog源码,将这个压缩包解压缩到google app 的sdk安装目录中,此处解压后的名字叫做micolog。

4. 修改micolog文件夹中的app.yaml文件,第一行的application名字一定要和在google app账号上的名字一样,否则再下面上传的时候会失败的,不要翻低级错误哦

5. 因为google app升级了导致单一名称的属性名,为了避免上传到服务器失败,还需要修改micolog中的index.yaml文件。观察那个properties下 面,如果只有一个“-name”的属性,就会导致上传失败。文件中的注释用”#”。可以从这里下载直接使用我修改好的文件。自己修改的话,如配置中原来的样子是:

# Unused in query history — copied from input.

- kind: Archive

properties:

- name: date

direction: desc

修改之后的样子就是:

# Unused in query history — copied from input.

#- kind: Archive

# properties:

# – name: date

# direction: desc

6. 随后进入google app engine的安装目录(默认是cd C:\Program Files\Google\google_appengine),执行appcfg.py update micolog/。第一次上传需要输入google app的用户名与密码。

7. 上传成功后,要等待大约10分钟才会有结果出来,要耐心。

绑定域名

1. 在google app engine,进入application的dashboard,这里面会显示application的流量及资源使用情况

2. 在页面的左侧,有个Versions,点击进入后,会出现个“Add Domain”按钮,点击这个按钮,出现下面这样的一个页面:

clip_image002

3. 注意上面用红色标注的地方,先要点击那个,将你要绑定的域名注册google app,这个是引导到一个google企业应用套件的一个注册页面,提供doc,mail等的一大堆服务。

4. follow注册的引导,会提示注册域名。(如果没有follow引导,在上方最右侧的服务设置中,也有个app Engine的对应application名字选项,在那里可以添加要是用的域名。)

clip_image004

5. 填好域名,点击继续设置,到域名提供商那里,填写dns配置。Google的提示是配置CNAME记录到ghs.google.com,但貌似这个东东有时候会被墙封,所以也有一些配置ip地址的方式(参考来源),配置A记录指向一下的ip:(今天搭建服务的时候,发现这四个ip都是ping不同的,囧)

    1. 216.239.32.21
    2. 216.239.34.21
    3. 216.239.36.21
    4. 216.239.38.21

我采用的方式是ping了下ghs.google.com的地址配置到dns中了以www.name.com为例子:

clip_image006

分类: it, micolog 标签: