[关闭]
@jeffjade 2016-03-27T02:54:22.000000Z 字数 4192 阅读 1893

Rake一键生成发布Jekyll

Jekyll


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

个人博客,目前主用这Hexojekyll,两者都很是轻量便捷。Hexo是一个开源的静态博客生成器,由以为台湾大学生用node.js开发而成,晚晴幽草轩就是用Hexo搭建而成。jekyll是Ruby写的一个轻量级的博客系统,也是Github Page默认搭配,而天意人间舫则是以Jekyll创造出的。

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

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

  1. git add .
  2. git commit -m "commit massge"
  3. git push origin master

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

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

下载安装Rake,可以使用 gem

gem install rake

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

  1. rake post["Title"]
  2. rake draft["Title"]
  3. rake publish
  4. rake page["Title"]
  5. rake page["Title","Path/to/folder"]
  6. rake build
  7. rake watch
  8. rake watch[number]
  9. rake watch["drafts"]
  10. rake preview
  11. rake deploy["Commit message"]
  12. 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 中。所以这边自己更改了下原有的写法,比如新建一篇文章:

  1. # Add 2016-03-01(rake post title="xx")
  2. desc "Create a post in _posts"
  3. task :new do
  4. puts "Input File Path(book/life/resource/tech/tool,default _posts Root):"
  5. @dir = STDIN.gets.chomp
  6. puts "Input File Name(for Url):"
  7. @url = STDIN.gets.chomp
  8. puts "Input Article Title(for Article):"
  9. @name = STDIN.gets.chomp
  10. puts "Input Article Categories(工具|资源|生活|技术|读书 Separated By Spaces):"
  11. @categories = STDIN.gets.chomp
  12. puts "Input Article Tags(Separated By ,)"
  13. @tags = STDIN.gets.chomp
  14. puts "Input Article Keywords(Separated By ,)"
  15. @keywords = STDIN.gets.chomp
  16. puts "Input Article Description(Article Desc):"
  17. @description = STDIN.gets.chomp
  18. @slug = "#{@url}"
  19. @slug = @slug.downcase.strip.gsub(' ', '-')
  20. @date = Time.now.strftime("%F")
  21. @post_url = (@dir=="") ? "" : ("/" + "#{@dir}");
  22. @post_name = "_posts#{@post_url}/#{@date}-#{@slug}.md"
  23. if File.exist?(@post_name)
  24. abort("Failed to create the file name already exists !")
  25. end
  26. FileUtils.touch(@post_name)
  27. open(@post_name, 'a') do |file|
  28. file.puts "---"
  29. file.puts "layout: post"
  30. file.puts "title: #{@name}"
  31. file.puts "date: #{Time.now}"
  32. file.puts "categories: #{@categories}"
  33. file.puts "tags: #{@tags}"
  34. file.puts "keywords: #{@keywords}"
  35. file.puts "description: #{@description}"
  36. file.puts "---"
  37. end
  38. exec "vi #{@post_name}"
  39. end

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

  1. nicejade.github.io git:(master) rake new
  2. Input File Path(book/life/resource/tech/tool,default _posts Root):
  3. life
  4. Input File Name(for Url):
  5. the pleasure of thinking
  6. Input Article Title(for Article):
  7. 思维的的乐趣
  8. Input Article Categories(工具|资源|生活|技术|读书 Separated By Spaces):
  9. 生活
  10. Input Article Tags(Separated By ,)
  11. Thinking,Essay
  12. Input Article Keywords(Separated By ,)
  13. 思维的乐趣
  14. Input Article Description(Article Desc):
  15. 王小波散文随笔:思维的录乐趣

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

  1. ---
  2. layout: post
  3. title: 思维的乐趣
  4. date: 2016-03-26 00:22:39 +0800
  5. categories: 生活
  6. tags: Thinking,Essay
  7. keywords: 思维的乐趣
  8. description: 王小波散文随笔:思维的乐趣
  9. ---

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

  1. post:
  2. template: _post.txt
  3. extension: md
  4. page:
  5. template: _page.txt
  6. extension: md
  7. editor: atom
  8. git:
  9. branch: master
  10. transfer:
  11. command: rsync
  12. settings: -av
  13. source: _site/
  14. destination: ~/Git/yourGithubName.github.com/

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

  1. ---
  2. title:
  3. date:
  4. categories:
  5. tags:
  6. keywords:
  7. description:
  8. ---

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

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

以上改写脚本已上传这里jadeScriptCollect,会根据需要持续更新。

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注