解决Google(谷歌)服务不可用导致WordPress后台缓慢的问题

因为某些原因近期Google的大部分服务无法使用,特别是谷歌字体和一些公共库的调用问题,因为浏览器加载这些资源多是阻塞形式的,如果不能及时获取资源,那么浏览器将一直在等待,这样就会影响页面其他元素的渲染,对于用户来说,就会表现为页面加载缓慢或者打开困难。

因为我的博客之前调用了Google的字体服务,所以前一段时间打开页面时出现了这类现象,通过FireBug调试找到是Google字体的原因。搜索网络后找到了替代的办法,那就是使用360提供的前端公共库CDN服务缓存库

这些公共库主要分为:常用前端公共库Google前端公共库Google免费字体库

继续阅读

解决WordPress分类目录、标签丢失的问题

今天偶然注意到WordPress的分类和标签消失了,开始以为是数据库表损坏,于是通过PHPMyAdmin修复表,但是注意到修复表的过程中有一个错误:Can't create/write to file '/tmp/...,错误代码为13,基本上是因为没有权限导致的,由于这个要修复的表和分类标签表关系不大,于是没多想,只有上网搜索分类目录丢失的具体原因。

网上遇到这个问题的大多数是因为临时文件夹满导致磁盘空间不足的原因,比如这里有篇帖子《My Categories and Tags all disappeared! Please HELP!》,多数人通过清除临时文件夹的文件释放磁盘空间来解决了这个问题,但是我主机上临时文件夹/tmp是空的,而且磁盘空间也绰绰有余,不存在这类问题。

我注意到刚才修复表的错误,会不会是因为MySQL没有读写/tmp文件夹的权限?通过ls -l命令发现只有root有写权限,网上有建议新建一个临时目录,然后再修改配置文件的。

觉得麻烦,索性直接chmod 777 /tmp开放全部权限了,设置完成后,PHPMyAdmin可以正常修复表了,分类和标签也回来了。

WordPress稳妥的加载JQuery库(防止CDN外链失效)

这个是制作主题时遇到的,因为引用了JQuery脚本库,为了最佳的浏览体验,当然希望这个脚本库加载得越快越好,或者我们的主机商限制了流量,JQuery几十K的流量也要勒紧裤带啊,所以我们会考虑CDN,国内外流行的JQuery CDN有Google的或者Sina云计划,地址分别是:

http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js

然后我们就可以直接用script标签引用了,比如这样:

<script type="text/javascript"
        src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js">
</script>

好吧,速度问题算是解决了,而且有这些大公司做后盾,我们也不必考虑其他问题,等等,没有其他问题了吗?假如我说假如我使用的这家公司倒闭了呢?好吧,现阶段不可能无缘无故倒闭的;假如链接地址更改了呢?或者被XX了?好吧,这个是我们要考虑的问题,针对XX问题,我们可以选择国内sina的CDN,对于前一个问题,我们就需要考虑容灾措施了,假如这些发生了,我们该怎么做?

继续阅读

博客改版采用新主题界面

由于不能忍受先前的在官方Twenty Eleven主题基础上定制的自用主题Blaue的种种Bug,所以决定重新定制一个新的主题自用,实在想不出什么好的名字,姑且就叫做Blaue V2吧,Blaue这个词是由于之前主题的主色调是Black & Blue,所以造出了这么个词,现实中貌似还真有这么个词,不过好像是德文,好了,扯多了,下面谈谈这次主题改造的细节吧。

这次主题改的母版是toolbox主题,但是改动比较大,特别是将Blaue的部分构架融合过来了,而之前的Blaue是基于Twenty Eleven主题的,算是混血儿,所以这次Blaue V2只算是在Blaue基础上做的改进。

1. 放弃了响应式自适应的流布局,采用固定布局模式,固定布局容易操作些,不容易错位,也能很好兼容大多数浏览器。

2. 采用JQuery库,原先我一直很抵触背这么大个JS库的,之前使用的纯JavaScript代码来实现相关功能,后来采用Sizzle选择器(也是JQuery内置的选择器),现在想想干脆直接用JQuery得了,省得为兼容问题而纠结。

3. 采用Google Web Font优化部分英文字体显示。

4. 菜单挪到了顶部,采用当前比较流行的设计样式,本来想把字体大小那段也弄到顶部的,但是感觉有点奇怪,所以作罢。

5. 评论这块采取了NeoEase的做法,将网友讨论和Trackbacks(Pingbacks)用选项卡进行分离,避免阅读评论的干扰,评论发布采用了Ajax技术,但是感觉发布成功这块处理得不是很好的。

6. 404找不到页面和搜索页面单独进行了优化,搜索页面除了显示本站结果外还将用选项卡分割显示Google自定义搜索的结果。

继续阅读

本站MySQL数据库崩溃正在尝试恢复

MySQL意外崩溃,所有的页面均出现404无法访问的问题,后台无法登录,出现绿色背景以及Updating SEO configuration options in database(猜测是All In One SEO插件问题)。通过myisamchk -r检测数据库,并且通过invoke-rc.d mysql restart重启数据库服务基本解决问题,可惜后台登录不上出现:“您没有足够的权限访问该页面。”的错误消息。检查WordPress后台登录的数据库表wp_users以及wp_usermeta,发现其中表wp_usermeta提示“’wp_usermeta’ is marked as crashed and should be repaired”,看来wp_usermeta表损坏了,通过REPAIR TABLE命令处理过,然后后台登录正常。检查数据,发现丢失了一条评论,应该是Just_fly同学的评论,在此表示抱歉了。后来翻了一下自动备份文件夹,找到一份几个小时前的备份,立即恢复,丢失的评论也被找到了。

目前还在做扫尾工作,查看了MySQL的所有日志,竟然没有找到任何有效信息,由于这次崩溃导致WordPress出现诡异的找不到数据404错误,而不是连接不到数据库503错误,所以外部监控网站没有能够及时捕获这次故障时间,我是临近中午才发现问题的。好了,看来准备把这个老旧的MySQL数据库升级一下了,之前还考虑这个运行蛮稳定的就不升级了,看来不升级不行哎。

这是第200篇文章,没想到出现这样的问题,也算是个纪念吧,经常备份是个好习惯哦。

解决WordPress中文附件attachment以及tag URL导致的404找不到页面问题

之前从Typecho转换到WordPress的,结果使用网上的转换程序勉强转换成功,没想到却带来了一堆后遗症,其中比较明显的就是中文url导致的404找不到页面的问题。

其实搜索“Wordpress 中文 tag 404”关键字词就可以找到大量关于这类问题以及解决方案的信息,这些解决方案无非是要求修改WordPress的wp-include/classes.php(3.1之前版本)或wp-include/class-wp.php(3.1+之后版本)的源代码,增加UTF-8与GBK的一个转换;或是修改rewrite.php改变重写规则。这些我没有去尝试,我感觉修改官方代码的做法不是很妥当的,即使修改了,以后升级什么的,原先修改的内容仍然会被替换,或者修改有可能会导致新的问题等等,所以我不建议修改官方源代码。

如果默认官方表前缀wp_的话,导致这个问题的中文tag在MySQL的位置为表wp_terms的列slug,中文附件attachment所在MySQL的位置为表wp_posts的列post_name。这次转换前我尝试着发布了一篇带有中文tag或者attachment中文名称的文章,并且访问这个tag或者附件正常,然后再查看MySQL数据库。发现其中attachment的post_name以及tag所在的slug均被改写成类似%E8%A7%A3%E6%9E%90这样的字符串,其实这类字符串是符合URL编码标准的,一般我们的输入的字符串在提交URL前均会被编码成形如这样的编码;再看看出问题的编码形式,直接是中文未经过任何编码,所以需要访问这类资源需要进行编码转换才能正常访问,否则就会出现404找不到页面的问题。

其实我们可以通过PHP内置的urlencode对attachment的post_name以及tag所在的slug进行一次编码然后再写入数据库,以避免出现这类问题,这里我对所有附件attachment的post_name进行了一次urlenocde编码,代码如下(测试前请备份数据库)

继续阅读

博客已经从Typecho转到WordPress

由于不能忍受Typecho的一些Bug,而且官方迟迟不出新版本,所以只能放弃这款国产优秀的博客程序,正式转向WordPress,突然觉得有些事情还是随大流比较好,过于小众的话技术支持和产品服务就跟不上了,大众的产品用得人多,不得不承认其有成熟稳定以及快速问题解决的优势。

好了,目前算是转到WordPress了,第一次用WP,对很多东东都感到新鲜,还在摸索阶段,呵呵,就在刚刚又收到了一个垃圾评论,短短3个小时竟有两个垃圾评论,看来还要好好研究一下反制措施。

现在只能说初步完成转换过程,主题是我基于官方Twenty Eleven改的,当然改动比较大了,所以会有各种各样的兼容问题或者Bug,基本上保证了IE6下浏览的正常,不过还是建议仍然用IE6的童鞋赶紧换先进的浏览器,前端脚本本来想用JQuery的,不过觉得其体积太大,而且计划中也没有几个JavaScript效果,于是借用了Sizzle选择器然后写了个脚本库,当然不排除我写的脚本会有兼容问题,如果大家发现有什么不对劲的地方欢迎提出。

这几天博客先试运行吧,有什么意见或者问题可以向我提出。另外博客已经迁出境外,所以在访问速度上对于国内的朋友还是抱歉了。