Rake让Jekyll写博更优雅

于想拥有个人站点品牌的人来讲,现如今是一个很好的时期。至少 HexoJekyllLeanoteWordPressFarBox Octopress、ghost、marboo、Medium、Logdown、prose.io 等诸多层出不穷的好工具,让建站写文已经变得异常简洁方便。分分钟可搭建起美观大方的个人博客,这样的教程已经充盈网络,在此不提。这里要谈及的是,以Rake一键生成Jekyll文章模版,一键预览效果,一键发布等等;Rake让Jekyll写博更优雅。

个人博客,目前主用这Hexojekyll,两者都很是轻量便捷。Hexo是一个开源的静态博客生成器,由一位台湾大学生用node.js开发而成,晚晴幽草轩就是用Hexo搭建而成。jekyll是Ruby写的一个轻量级的博客系统,也是Github Page默认搭配,天意人间舫则是以Jekyll创造出的;(题外话,Hexo发布前需要运行Hexo g本地生成下,文章多了,速度上也会慢些(百篇文章,5s左右);发布后更新速度也没Jekyll那么快;其他常用体验倒差不太多)。

在设计上,jekyll框架将博客模块化,比如有负责网页显示样式的部分(即模板),有负责博客内容的部分,也就是我们使用markdown语言来写的内容。其次,它通过一定的规则,又将各个模块的内容组织起来,并创建各个页面之间的联系。如此是它可以使我们在写作的时候,尽最大的精力去集中在内容的创作上,而不用太在意格式以及排版。并且借助于git这个相当流行的分布式版本控制系统,可很有效的管理所写的文章,完全可以做到在没有网络的情况下写作|预览,待有网络时再将内容同步。

使用Jekyll本已经非常方便了,不管是本地测试还是发布线上。但还是不够简洁,对于渴望极致的懒人来讲。比如发布文章到线上:

git add .
git commit -m "commit massge"
git push origin master

如果能够敲击一个命令完成,就不能忍受搞三行;虽然三行只多余费了不到半分钟。撰文写字,本就不易,一篇下来,已是很累;欲长久此好,必须尽可能减轻完成这事儿之成本;否则累觉不爱之后,爱好这种事儿,会在累烦的折腾种被阉割抛弃的。在操纵Jekll博客方面,有很多可以利用的脚本,比如bash,Makefile,win下的bat等等; 朋友@痞子达 向我推荐了Rake,这些日子用了下着实很方便,改写也颇为简单,就此录下一篇推荐给大家。

何为Rake?: 即Ruby Make,一个用ruby开发的代码构建工具,要了解更多Rake可以参看其官网,抑或是这里整理的简洁强大如斯:Rake

下载安装Rake,可以使用 gem

gem install rake

如何使用Rake来优雅Jekyll写博文流程?,只需要写一个Rakefile为名的Rake脚本放置在Blog项目的根目录下,同时做一点简单的配置即可。Jekyll Rake Boilerplate是一个功能很完善的脚本,有以下诸多方法可供使用:

rake post["Title"]
rake draft["Title"]
rake publish
rake page["Title"]
    rake page["Title","Path/to/folder"]
rake build
rake watch
    rake watch[number]
    rake watch["drafts"]
rake preview
rake deploy["Commit message"]
rake transfer

这意味着使用Jekyll写文的流程可简化为:

  • 写草稿:rake draft[“Title”]
  • 将草稿发表:rake publish
  • 直接写博文:rake post[“Title”]
  • 做页面:rake page[“Title”]
  • 写完后发布,rake deploy[“Commit message”]

这个脚本目测为国外人编写的,于个人需求还是得调整下的。并且这里采用 rake draft["Title"] 这样命令行来运行,对于使用 zsh 作为终端的朋友,就颇为有点蛋疼了。”[]”在zsh这里会被转义,所以运行命令就得这样 rake post\["TitleName"\],否则会报如下错误:

zsh: no matches found: post[TitleName]

伊始用这个老报错,还不懂Ruby语言,去查看了下,用环境变量做参数可以,没报错(ENV[“Title”]来接收消息)。费了些功夫才找到的原因,参见傳參數到 Rake 中。所以这边自己稍微改了下原有的写法,比如新建一篇文章:

# Add 2016-03-01(rake post title="xx")
desc "Create a post in _posts"
task :new do
    puts "Input File Path(book/life/resource/tech/tool,default _posts Root):"
    @dir = STDIN.gets.chomp
    puts "Input File Name(for Url):"
true@url = STDIN.gets.chomp
trueputs "Input Article Title(for Article):"
true@name = STDIN.gets.chomp
trueputs "Input Article Categories(工具|资源|生活|技术|读书 Separated By Spaces):"
true@categories = STDIN.gets.chomp
    puts "Input Article Tags(Separated By ,)"
    @tags = STDIN.gets.chomp
    puts "Input Article Keywords(Separated By ,)"
    @keywords = STDIN.gets.chomp
    puts "Input Article Description(Article Desc):"
true@description = STDIN.gets.chomp

true@slug = "#{@url}"
true@slug = @slug.downcase.strip.gsub(' ', '-')
true@date = Time.now.strftime("%F")
    @post_url = (@dir=="") ? "" : ("/" + "#{@dir}");
true@post_name = "_posts#{@post_url}/#{@date}-#{@slug}.md"
trueif File.exist?(@post_name)
true   abort("Failed to create the file name already exists !")
trueend
trueFileUtils.touch(@post_name)
trueopen(@post_name, 'a') do |file|
true    file.puts "---"
truetruefile.puts "layout: post"
truetruefile.puts "title: #{@name}"
truetruefile.puts "date: #{Time.now}"
truetruefile.puts "categories: #{@categories}"
        file.puts "tags: #{@tags}"
        file.puts "keywords: #{@keywords}"
        file.puts "description: #{@description}"
true    file.puts "---"
trueend
trueexec "vi #{@post_name}"
end

运用的话,只需要rake new开启命令,按照其提示的一步步输入:title categories tags keywords description 等

➜  nicejade.github.io git:(master) ✗ rake new
Input File Path(book/life/resource/tech/tool,default _posts Root):
life
Input File Name(for Url):
the pleasure of thinking
Input Article Title(for Article):
思维的的乐趣
Input Article Categories(工具|资源|生活|技术|读书 Separated By Spaces):
生活
Input Article Tags(Separated By ,)
Thinking,Essay
Input Article Keywords(Separated By ,)
思维的乐趣
Input Article Description(Article Desc):
王小波散文随笔:思维的录乐趣

Rake即可帮着在 _posts/life目录下创建命名为“2016-03-26-the-pleasure-of-thinking.md”的文件,并根据所输入的生成以下内容:

---
layout: post
title: 思维的乐趣
date: 2016-03-26 00:22:39 +0800
categories: 生活
tags: Thinking,Essay
keywords: 思维的乐趣
description: 王小波散文随笔:思维的乐趣
---

接下来只管产出内容即可。当然了,之前提到需要一点配置,就是需要在_config.yml种对template,page,git等进行配置,譬如:

post:
  template: _post.txt
  extension: md
page:
  template: _page.txt
  extension: md
editor: atom
git:
  branch: master
transfer:
  command: rsync
  settings: -av
  source: _site/
  destination: ~/Git/yourGithubName.github.com/

对应可以按需在_config.yml目录下 创建_post.txt _page.txt即可;根据Html种Meta对于SEO的重要,以及站点分类需要,个人配置内容如下:

---
title:
date:
categories:
tags:
keywords:
description:
---

如此配置完毕,即可运行如下命令:

rake new // 新建文章 rake post[“TitleName”] // 生成纯净文章模版配置 rake deploy “message”=”Commit Message” //一键发布文章 rake preview //一键预览(还会自主协助打开浏览器) rake build //Build the site rake post[“Title”] //创建文章(tags,keywords等洁净的)

当然Rake强大远非如此,完全可以用它来编出些强大的脚本,以此节省人力;并且比之于晦涩难记的Makefile,Bat,它的学习成本也小了很多。这里这是浅显的记载它能为Jekyll写博带来的便利。以上改写脚本已上传这里jadeScriptCollect,会根据需要持续更新。

折腾不是为折腾而折腾,只为偷懒而勤奋;简洁才是王道。

2016-03-26 于深圳。

原文出自: http://www.jeffjade.com 原文链接:http://www.jeffjade.com/2016/03/26/2016-03-26-rakefile-for-jekyll/#

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

走近科学:如何搞定各种各样的终端机

特别声明:本文提供一些绕过终端机的方法,仅用于安全学习及教学用图,禁止非法利用。本文旨在提高市面上终端机的安全性,避免其遭到恶意破坏。 定场诗 妖都地铁售票终端...

226100
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第1章 Kotlin简介

我们这里讲的Kotlin,就是一门以这个Котлин岛命名的现代程序设计语言。它是一门静态类型编程语言,支持JVM平台,Android平台,浏览器JS运行环境,...

10020
来自专栏進无尽的文章

地图| 高德地图源码级使用大全

高德地图提供包括:web前端、Android、iOS、服务器、小程序等平台的地图服务, 地图功能众多,本文记载的只是自己遇到的一些问题,绝大部分功能只要参照官...

62920
来自专栏移动端开发

iOS9.0 友盟分享详细过程

一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了。然后在这个方法里面设置Key -...

218100
来自专栏FreeBuf

Bash漏洞再次演进:缓冲区溢出导致远程任意命令执行

近几天,“Shellshock”Bash漏洞的出现可谓是给安全界投放了一颗重型炸弹,越来越多的厂商和黑白帽子都纷纷加入到分析阵营当中,同时也接二连三爆出了更多针...

219100
来自专栏Java与Android技术栈

一个快速分析android app使用了哪些sdk的工具工具使用实现原理写在最后

前段时间我们要准备开始做移动端广告sdk,我需要了解市面上一些常用的广告sdk使用情况。如果一个个app去分析,那工作量会非常庞大,所以就产生了这个工具Anal...

11320
来自专栏FreeBuf

【永不消逝的电波(二)】HackRF入门:家用无线门铃信号重放

0x00 前言 在第一篇文章:永不消逝的电波(一):无线电入门篇 我们了解了一下无线电的发展史以及无线电的一些物理知识,在第二篇里我们将用HackRF录制家用...

32470
来自专栏雨尘分享

iOS 最新审核被拒及解决方案 (包括2.1大礼包)

92050
来自专栏哲学驱动设计

CQRS讨论

今天和同事一起讨论了CQRS(Command Query Responsibility Segregation),过程中,我产生了一些疑问,先记录在这里,以后有...

18970
来自专栏星流全栈

Github开源免费编程书籍

2.3K40

扫码关注云+社区

领取腾讯云代金券