利用Octopress在Github上搭建博客及后续问题总汇
首先贴一下我的新博客地址: http://findingsea.github.io
用Octopress在GitHub上搭建博客已经不是什么新鲜事了,网上的教程也多了去了,大题的方法什么都差不多,这篇Blog就把这些资源总汇一下,然后再加几点我遇到的问题和解决办法。
搭建和配置
搭建的大致过程大概包括:安装Ruby --> 安装Octopress --> 配置Octopress --> 部署到GitHub上 --> 提交博客。我主要参考的是破船的这篇教程——《利用Octopress搭建一个Github博客》。一路按教程走下来大问题应该不会有,但是小问题可能就不断了,这待会会讲到。
其他比较推荐的教程还有,唐巧的这篇《象写程序一样写博客:搭建基于github的博客》(好吧,他还把『像』写错了)。这里面还提到了一些提高访问速度的技巧和介绍了一个支持微博评论的工具,都挺有用的。
另外,还有这篇《Octopress - 像黑客一样写博客》,介绍地非常详细,并介绍了很多个性化配置的技巧,其中对CSS的修改我觉得非常值得学习和借鉴。
//--- 2013-09-21 update ---//
以及这篇《Octopress博客问题解决方案与技巧》,里面汇总了很多Octopress的设置技巧,在首页输出摘要的设置方法和zsh报错的原因(下面会提到),我都是从这篇文章里面找到。
遇到的问题
安装失败问题
在运行下面这些语句的时候,终端直接就没反应了,然后过很久报error,据说是访问的地址可能被墙了,但是我在浏览器里访问http://rubygems.org/这个地址是可以的,所以就很纠结,当时就卡在这里下不去,最后无奈就多试了几次,结果就好了。你只能服了天朝的网络了。(从目前情况来看,应该识没有被墙,如果报类似could not download这种错误,只能多试几次,也没别的办法了)
gem install bundler
rbenv rehash # If you use rbenv, rehash to be able to run the bundle command
bundle install
引号问题
根据唐巧的教程,新建文章的指令应该是:
rake new_post["title"]
然后在相应的markdown文件中头部自动生成的信息中会有:
title: "title"
当时当我按照这个指令去执行的执行的时候,终端报错:
zsh: no matches found: new_post[title]
我在网上找到的解决办法是将指令改成:
rake 'new_post["title"]'
这样创建新文章是成功了,但是立马引发了另一个问题。生成好文章之后,执行rake generate指令,终端报错:
/Users/findingsea/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych.rb:203:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 2 column 1 (Psych::SyntaxError)
from /Users/findingsea/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych.rb:203:in `parse_stream'
from /Users/findingsea/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych.rb:151:in `parse'
from /Users/findingsea/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych.rb:127:in `load'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/gems/jekyll-0.11.2/lib/jekyll/convertible.rb:33:in `read_yaml'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/gems/jekyll-0.11.2/lib/jekyll/post.rb:39:in `initialize'
from /Users/findingsea/Workspace/Github/octopress/plugins/preview_unpublished.rb:23:in `new'
from /Users/findingsea/Workspace/Github/octopress/plugins/preview_unpublished.rb:23:in `block in read_posts'
from /Users/findingsea/Workspace/Github/octopress/plugins/preview_unpublished.rb:21:in `each'
from /Users/findingsea/Workspace/Github/octopress/plugins/preview_unpublished.rb:21:in `read_posts'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/gems/jekyll-0.11.2/lib/jekyll/site.rb:128:in `read_directories'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/gems/jekyll-0.11.2/lib/jekyll/site.rb:98:in `read'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/gems/jekyll-0.11.2/lib/jekyll/site.rb:38:in `process'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/gems/jekyll-0.11.2/bin/jekyll:250:in `<top (required)>'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/bin/jekyll:23:in `load'
from /Users/findingsea/.rvm/gems/ruby-1.9.3-p448/bin/jekyll:23:in `<main>'
当时差点没吓死,以为怎么了,把关键错误描述上网搜了下,找到了这篇《Linked List Posts: From Movable Type to Octopress》这个老兄(暂且认为是男的吧)和我遇到了一样的错误,他新建的markdown文件里title的内容里,出现双引号嵌套双引号,这违反了markdown的语法规则,所以解析出错了。我立马查看了我新建的问题,果然如此:
title: ""title""
着就相当于中间的title不包含在任何引号中,所以生成的时候会报错。最后我把指令改成如下所示,就一切正常了。
rake 'new_post[title]'
至于原因现在还不是很清楚,我怀疑很有可能是shell造成的,我用的zsh,而教程上一般用bash的比较多。
//--- 2013-09-21 update ---//
上面提到的问题已在《Octopress博客问题解决方案与技巧》中找打,的确是shell引起的问题,用zsh的同学可以借鉴下。
字体问题
由于对字体方面有洁癖,所以在这上面耗费了很久,看了很多博客采用的字体方案,其中Aiur最让我喜欢,尤其是正文的英文字体,所以我立马留言向博主询问他采用的是哪种字体,最后得知是Google的开源字体Open Sans。
Octopress字体的设置文件是:sass/custom/_fonts.scss,其中$heading-font-family定义的是文章标题的字体,$header-title-font-family定义的是博客标题的字体,$header-subtitle-font-family定义的是博客子标题的字体,$sans和$serif定义的是正文的字体,$mono定义的是代码的字体。这里需要注意的是,/sass/custom/_style.scss里定义的样式会覆盖其他地方定义的样式,但唯独_font.scss里的这几个值不会被覆盖,也就说如果你在_fonts.scss里已经定义了$mono的值,还想在_style.scss中修改<code></code>的字体样式是不行的,最后渲染出的结果还是$mono的字体。(一开始我不知道这一点,在_style.scss里折腾了好久)。
特别说明的是我对编程字体尤其在意,我最喜欢的是Adobe的开源字体Source Code Pro,而且是跨平台的,不过这在很多机器上不一定有装,而且貌似GoogleFonts没有收录这个字体,所以我依次补充了Mac上最适宜的编程字体Monaco,Windows上最适宜的编程字体Consolas,和Ubuntu上最适宜的编程字体Ubuntu Mono,这里的设置是依次序寻找到第一个可以使用的字体。(也就说浏览器会先寻找本机是否装有Source Code Pro,如果没有就寻找下一个Monaco,以此类推,直到找到一个可用的字体进行渲染,另外,我所选的三款字体都是三个平台默认安装的,这样可以最大程度地保证代码阅读质量)
下面是我的_fonts.scss文件中的定义:
$sans: Open Sans;
$serif: Open Sans;
$mono: Soure Code Pro, Monaco, Consolas, Ubuntu Mono;
$heading-font-family: "PT Serif",Georgia,"STHeiti","SimHei","Helvetica Neue",Arial,sans-serif;
$header-title-font-family: "Futura", sans-serif;
$header-subtitle-font-family: "Futura", sans-serif;
最后说一点,在上文中提到的唐巧的《象写程序一样写博客:搭建基于github的博客》中,他提到了一个优化博客load速度的方法是:删除/source/_includes/custom/head.html文件中的谷歌字体,因为GFW的关系,这部分载入会特别慢。但这会引发一个问题就是你无法使用PT Serif和Open Sans这些优质的谷歌字体了,解决方法是可以讲他们下载到本地,然后在/sass/custom/_style.scss中添加:
css @font-face { font-family: Open Sans; src: url(fonts/OpenSans-Regular.ttf) } 不过这种方法的弊端在于需要把你用到的每个本地可能没有安装的字体都下载下来,我嫌太麻烦,就没有按这种方法,而且英文字体库不像中文字体库动辄上M,基本都维持在K这个级别,速度慢了这么一点还是可以忍受的。
利用Octopress在Github上搭建博客及后续问题总汇的更多相关文章
- 基于Hexo且在GitHub上搭建博客
title: 基于Hexo且在GitHub上搭建博客 Welcome to Fofade's Blog! 搭建初衷 大大小小,大学两年,玩了很多,也学了很多. 回首望之,曾经不知道的,现在是知道了,但 ...
- 在github上搭建博客(使用Jekyll)
简单说,只需要三步,就可以在 Github 搭建起一个博客: 在 Github 上建一个名为 xxx.github.io 的库: 把看中了的 Jekyll 模板 clone 到本地: 把这个模板 pu ...
- 在github上搭建博客的问题
最近想到要建立一个自己的博客,以便记录自己在学习中遇到的问题.发现github免费提供空间,正好可以利用它来搭建自己的博客.毕竟github pages免费空间,不限制流量,每次的博客改动和博客模板的 ...
- 在Github上搭建博客
貌似还是这个链接最靠谱呀 http://my.oschina.net/nark/blog/116299 如何利用github建立个人博客:之一 在线编辑器http://markable.in/ed ...
- 使用Jekyll在Github上搭建博客
最近在玩github,突然发现很多说明网站或者一些介绍页面全部在一个域名是*****.github.io上. 好奇!!!真的好奇!!!怎么弄的?我也要一个~~~ 于是去网站上查询了一下,找到了http ...
- 利用github page搭建博客
为什么选择GitHub Pages? 很多人用 wordpress,你为什么要用 github pages 来搭建? 1.github pages有300M免费空间,资料自己管理,保存可靠: 2.学着 ...
- 用Jekyll在github上写博客——《搭建一个免费的,无限流量的Blog》的注脚
本来打算买域名,买空间,用wordpress写博客的.后来问了一个师兄,他说他是用github的空间,用Jekyll写博客,说很多人都这么做.于是我就研究了一下. 比较有价值的文章有这么几篇: htt ...
- 可能是最详细的 Hexo + GitHub Pages 搭建博客的教程
前言:博主目前大三,Web 前端爱好者.写博客的好处,不是为了写而写,而是一个记录思想的过程.不要考虑它能带给你什么,而是你自己从中收获了什么. 最近刚好有空,于是就参照网上的各种教程,搭建了一个博客 ...
- 使用 Hexo 在 GitHub 上建立博客 · Utopia's Daily Note
使用 Hexo 在 GitHub 上建立博客 # 写在前面 其实我在一月份的就开始写了三篇博客文章,你没有看错,只是写了三篇,然后,就没有然后了.我还在其中一篇文章中写着,不知道自己能够坚持多久.事实 ...
随机推荐
- 关闭socket连接最好的方法
最好关闭连接的方法 `C S` `shutdown-WR ` `发送FIN` ` read-0发送ACK` ` ......` ` close` ` 发送FIN` `read-0` `close` ` ...
- Cocos2d-x 3.1.1 学习日志7--7分钟让你了解cocos2d-x3.1.1 Sprite精灵类
精灵(Sprite)是游戏里面的角色,比方敌人.游戏里面运动的物体等等,所以精灵是游戏里面一个很常见的概念.差点儿无处不在. 在Cocos2D-x里面精灵是用Sprite类来进行表示的,它能够用一张图 ...
- 为什么选择使用Spring Cloud而放弃了Dubbo
为什么选择使用Spring Cloud而放弃了Dubbo 可能大家会问,为什么选择了使用Dubbo之后,而又选择全面使用Spring Cloud呢?其中有几个原因: 1)从两个公司的背景来谈:Dubb ...
- 【BZOJ】1068: [SCOI2007]压缩(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1068 发现如果只设一维的话无法转移 那么我们开第二维,发现对于前i个来说,如果确定了M在哪里,第i个 ...
- Machine Learning With Spark学习笔记(在10万电影数据上训练、使用推荐模型)
我们如今開始训练模型,还输入參数例如以下: rank:ALS中因子的个数.通常来说越大越好,可是对内存占用率有直接影响,通常rank在10到200之间. iterations:迭代次数,每次迭代都会降 ...
- hdu 2105:The Center of Gravity(计算几何,求三角形重心)
The Center of Gravity Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- MFC 单选按钮Radio使用注意
使用MFC Radio时遇到问题:数据交换时出现断言崩溃框 定位于: 解决方法: 1.按CTRL+D,保证同一组内的radio的tab序号是连续的: 2.同一组内,设置 radio1的属性: gro ...
- ETL概念,ETL流程
ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...
- Android 网卡修改
无线网卡配置可能的存储位置 1./data/nvram/APCFG/APRDEB/,配置文件是WIFI,需要使用HexEditor工具修改 2.etc/fireware/,文件名是nvram.txt( ...
- NData转化
NSdata 与 NSString,Byte数组,UIImage 的相互转换---ios开发 Objective-C 1. NSData 与 NSStringNSData-> NSStringN ...