关于jekyll:第一篇文章jekyll的配置

layout: posttitle: "第一篇文章-jekyll的配置"date: 2021-04-04 20:47:14 +0800categories: envs tags: [jekyll, envs, ruby, web, blog]记录心得:第一次应用jekyll搭建博客,记录下之间的过程。 为什么应用jekyll怎么的搭建过程怎么保护和更新遇到的问题1. 为什么应用jekyll之前应用过hexo,具体的地址是在实验室的主页上:xialab 长处是: 容易更改主题中文反对应用nodejs,容易部署。毛病是: 须要本人生成页面,只能把动态页面推送到github仓库,而src源码文件须要额定备份因为这个毛病,我抉择了jekyll 然而jekyll毛病也很显著,就是ruby这个环境真的很麻烦,目前也没怎么用过,冀望只是初期配置麻烦一点吧。 2. 搭建过程我在云服务器和本地PC设立了两个仓库 云服务器在腾讯云,CentOS本地PC是Windows,基于WSL搭建环境2.1 CentOS搭建通过yum装置ruby (此条不行),因为版本比拟老,是2.0版本,jekyll须要2.4 sudo yum install ruby遂通过源码装置 wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.gztar -zxvf ruby-2.7.1.tar.gzcd ruby-2.7.1mkdir -p /usr/local/ruby./configure --prefix=/usr/local/rubymake && make install批改profile,增加到全局变量 nano /etc/profile将如下内容增加到开端 export PATH="/usr/local/ruby/bin:$PATH"而后按Ctrl+X保留,而后激活 source /etc/profile2.1.1 装置及配置jekyll应用gem间接装置即可 gem install jekyll而后查看一下版本,这里我是3.7 jekyll -v生成页面文件(如果是新建博客站点的话) jekyll new myblog2.1.2 批改_config.yml目前我的配置文件如下,当前还须要批改 # 站点文件门路#source: .#destination: ./_siteencoding: utf-8# 指标网站门路设置permalink: :year/:month/:title.htmlmarkdown: Kramdown# 时区timezone: Asia/Shanghai# 设置导航目录nav:- name: Home link: /- name: About link: /about.html2.1.3 批改Gemfile这个文件,次要是管着jekyll的构建环境 ...

August 13, 2021 · 2 min · jiezi

在GitHub-Pages上搭建jekyll

每个人都应该要有自己的博客,下面介绍下自己使用jekyll在GitHub Pages部署搭建个人博客的内容 目录基本介绍从事互联网行业日久后,技术渐长,总想着写写,把自己回,让别人更多的看到自己。个人是这样想的哈哈。之前曾经自己使用laravel自己写了个项目,不了了之值。当时的感觉就会耗时不说,最重要的感觉上班在写,下班后继续写博客代码。失去了,做这件事情的本意(分享)。 其实现在搭建一个技术博客,非常简单。 常用的有下面几种: GitHub Pages + JekyllGitHub Pages + Hexowordpress自行构建依托与java或者PHP,配合前端vue,h5等什么是GitHub PagesGithub Pages 是面向用户、组织和项目开放的公共静态页面搭建托管服务,站点可以被免费托管在 Github 上,你可以选择使用 Github Pages 默认提供的域名 github.io 或者自定义域名来发布站点。Github Pages 支持 自动利用 Jekyll 生成站点,也同样支持纯 HTML 文档,将你的 Jekyll 站点托管在 Github Pages 上是一个不错的选择。 什么是jekylljekyll是一个简单的免费的Blog生成工具,类似WordPress。但是和WordPress又有很大的不同,原因是jekyll只是一个生成静态网页的工具,不需要数据库支持。但是可以配合第三方服务,例如Disqus。最关键的是jekyll可以免费部署在Github上,而且可以绑定自己的域名。 个人博客搭建整体流程: 选择一个jekyll主题,fork到自己的github仓库内使用gitHub的GitHub Pages,配置项目设置 GitHub Pages删除原有博客中内容,编写自由内容步骤详解1. fork项目以我个人项目为例,打给地址https://github.com/MyStudytime/studytime-Blog,点击Fork按钮复制代码到自己的仓库。大概1分钟左右可以完成。 2. 删除 CNAME 文件删除项目中的 CNAME 文件,CNAME 是定制域名的时候使用的内容,如果不使用定制域名会存在冲突。 3. 设置 GitHub Pages点击Settings按钮打开设置页面,页面往下拉到GitHub Pages相关设置,在Source下面的复选框中选择master branch,然后点击旁边的Save按钮保存设置。 4. 重命名项目点击Settings按钮打开设置页面,重命名项目名称为:YourGithubUserName.github.io 5. 重命名之后,再次回到 Settings > GitHub Pages 页面会发现存在这样一个地址: https://YourGithubUserName.github.io 特别注意此处完成后,虽然也可以打开页面,但是跳转页面还是我的页面,需要修改jekyll配置文件。 ...

June 11, 2019 · 1 min · jiezi

关于写作那些事之github告诉我构建失败,然后呢?

The page build failed for the master branch with the following error问题描述看到这封邮件,一脸懵逼,本地运行 gitbook 服务是正常渲染的,控制台并没有任何报错,谁知道推送到 github 时就报错了!登录到 github 网站查看网站源码已经同步过来了,但是静态网站无法同步,本地实在找不到任何报错信息,这让我如何是好?再看 github 反馈用的邮件中说道,如有问题可以回复邮件(If you have any questions you can contact us by replying to this email.).然后死马当活马医,尝试阐释了我的问题,请求帮助定位错误日志,没想到当天下午就收到 github 的回复邮件,提供了解决办法!问题是由于 Liquid Warning: Liquid syntax error (line 334) 错误,然而我确定这部分代码是没有任何问题的,因为这是我改造 gitbook-plugin-tbfed-pagefooter 插件时的一段代码,反复确认后发现并没有复制粘贴出错啊!var moment = require(‘moment’);module.exports = { book: { assets: ‘./assets’, css: [ ‘footer.css’ ], }, hooks: { ‘page:before’: function(page) { var _label = ‘最后更新时间: ‘, _format = ‘YYYY-MM-DD’, _copy = ‘powered by snowdreams1006’ if(this.options.pluginsConfig[’tbfed-pagefooter’]) { _label = this.options.pluginsConfig[’tbfed-pagefooter’][‘modify_label’] || _label; _format = this.options.pluginsConfig[’tbfed-pagefooter’][‘modify_format’] || _format; var _c = this.options.pluginsConfig[’tbfed-pagefooter’][‘copyright’]; _copy = _c ? _c + ’ all right reserved,’ + _copy : _copy; } var _copy = ‘<span class=“copyright”>’+_copy+’</span>’; var str = ’ \n\n<footer class=“page-footer”>’ + _copy + ‘<span class=“footer-modification”>’ + _label + ‘\n{{file.mtime | date("’ + _format + ‘")}}\n</span></footer>’; str += ‘\n\n<link rel=“stylesheet” href=“https://unpkg.com/gitalk/dist/gitalk.css">'+ ‘\n\n<script src=“https://unpkg.com/gitalk@latest/dist/gitalk.min.js"></script>'+ ‘\n\n<div id=“gitalk-container”></div>’+ ‘\n\n<script src=“https://snowdreams1006.github.io/gitalk-config.js"></script>'; page.content = page.content + str; return page; } }, filters: { date: function(d, format) { return moment(d).format(format) } }};来源于 gitbook-plugin-tbfed-pagefooter 插件的 index.js 文件,这里为了兼容 gitalk 插件而集成了相关代码,详情请参考 gitalk 评论插件解决方案根据邮件回复,定位到出错代码片段,真的没发现有什么问题啊?既然已经确定不是我的问题,那很可能就是 github 的问题了,邮件中推荐我使用 Jekyll 进行构建网站,不不不!既然已经选择 gitbook 搭建静态网站,那就没必要再使用 Jekyll ,我可不想那么麻烦!If you are not using Jekyll you can disable it by including a .nojekyll file in the root of your repository.所以我不妨试试新增 .nojekyll 文件,说不定就好使了呢!$ touch .nojekyll$ git add .nojekyll$ git commit -m “add .nojekyll”$ git push天不负我!竟然真的好使了,再也没有收到 github 的报错邮件反馈了,源码和网站都正常更新了!小结据我推测,可能是 github 误认为我的网站是使用 Jekyll 工具构建的,实际上,是使用 gitbook 构建的!因此,增加 .nojekyll 文件禁用 Jekyll 工具,自然不会再受相关语法限制而报错了.所以,遇到问题时,不仅要多思考,更应该寻求官方人员的帮助,即使不回你,你也要尝试一下! ...

April 12, 2019 · 2 min · jiezi

加速你的博客永无止境-七牛云存储

将自己的静态博客直接部署到七牛云存储,由七牛云托管运行,你说快不快,还没有注册七牛云的看这里,七牛云注册邀请:https://portal.qiniu.com/signup?code=3l7cpouzlru4y,哈哈!一、创建七牛云存储登录进入管理中心,菜单进入:对象存储=>新建存储空间,设置好空间名称就可以直接创建,完成后会分配一个测试域名,有效期只有30天,当然可以自定义域名,长期使用二、静态博客文件构建我使用的是jekyll管理博客, 通过命令jekyll build构建MacBook-Pro:iChochy mleo$ jekyll buildConfiguration file: /Users/mleo/Develop/GitHub/iChochy/_config.yml Source: /Users/mleo/Develop/GitHub/iChochy Destination: /Users/mleo/Develop/GitHub/iChochy/_site Incremental build: disabled. Enable with –incremental Generating… Jekyll Feed: Generating feed for posts done in 1.121 seconds. Auto-regeneration: disabled. Use –watch to enable.构建成功后,生成的静态文件都在_site目录中,直接上传到云空间就可以了三、同步静态博客文件到云存储这里使用到七牛云官方工具qshell工具介绍:https://github.com/qiniu/qshell工具下载:http://devtools.qiniu.com/qshell-v2.3.6.zip选择安装:文件名描述shell_linux_x86Linux 32位系统shell_linux_x64Linux 64位系统shell_linux_armLinux ARM CPUshell_windows_x86.exeWindows 32位系统shell_windows_x64.exeWindows 64位系统shell_darwin_x64Mac 64位系统,主流的系统1、安装以Mac为例,安装shell_darwin_x64运行复制命令:cp qshell_darwin_x64 /usr/local/bin/qshell,将shell_darwin_x64复制到 bin目录下,运行qshell -v检测是否安装成功MacBook-Pro:qshell-v2.3.6 mleo$ qshell -vqshell version v2.3.62、添加账号运行命令qshell accountqshell account <AK> <SK> <Your Name>参数说明<AK>、<SK>可以到个人中心 => 密钥管理中查看<Your Name>为用户的唯一标识,自定义,如iChochy3、同步文件 使用命令qshell qupload <LocalUploadConfig>其中LocalUploadConfig参数配制文件本人的LocalUploadConfig文件信息:MacBook-Pro:iChochy mleo$ cat .LocalUploadConfig{ “src_dir” : “/Users/mleo/Develop/GitHub/iChochy/_site”, “bucket” : “blog”, “ignore_dir” : false, “overwrite” : true, “check_exists” : true, “check_hash” : true, “check_size” : true, “rescan_local” : true, “skip_file_prefixes” : “test,demo,”, “skip_path_prefixes” : “hello/,temp/”, “skip_fixed_strings” : “.svn,.git,.log”, “skip_suffixes” : “.DS_Store,.exe”, “log_file” : “/Users/mleo/.qshell/upload.log”, “log_level” : “info”, “log_rotate” : 1, “log_stdout” : false, “file_type” : 0}主要参数说明:参数说明src_dir本地同步目录bucket云空间名称log_file日志文件命令参数详细说明:https://github.com/qiniu/qshell/blob/master/docs/qupload.mdMacBook-Pro:iChochy mleo$ qshell qupload .LocalUploadConfigWriting upload log to file /Users/mleo/.qshell/upload.logUploading /Users/mleo/Develop/GitHub/iChochy/_site/404.html => 404.html [1/67, 1.5%] ……………See upload log at path /Users/mleo/.qshell/upload.log通过日志查看详情cat /Users/mleo/.qshell/upload.log至此:文件已经同步到了云空间,修改文件后再次运行qshell qupload <LocalUploadConfig>命令及可完成同步四、自定义域名1、云空间绑定域名菜单进入对象存储=>空间概览=>融合 CDN 加速域名=>立即绑定一个域名 创建域名2、域名解析创建成功后七牛云会为每个域名分配一个CNAME,如:www.chochy.cn.qiniudns.com登录域名商的管理系统,将域名解析到CNAME五、设置存储空间菜单进入对象存储=>空间设置 设置空间信息如:开启默认首页index.html,自定义404页面等 现在可以通过域名直接访问自己的博客了,是不是非常快快快………………如:http://www.chochy.cn ...

April 9, 2019 · 1 min · jiezi

Jekyll 动态地建立静态博客网站 (Get Started)

提前声明:Jekyll并不简单,必须要正确的看待它。把它和PHP,JSP和Django等放在一起讨论会减少很多失落感。它的学习曲线几乎相当于Wordpress,工作流程和结构也几乎一样。Jekyll与Wordpress最大不同的就是,没有数据库。但是体验上来说也算不上什么大差别。彻底摒弃数据库,这算是一种Jekyll式的新思路。因为你需要的只是定期更新一些Markdown格式的文章,然后让它显示成网页,并放在一起成为网站而已。没必要大动干戈的设计数据库什么的。简单的说,Jekyll是一个基于Ruby语言的静态博客网站制作工具,它可以把Markdown转换成HTML网页。不过对于一个HTML网页来说,它得有标题、样式、日期什么的,甚至一些根据文章的不同而动态改变的内容等。这些就不仅是把Markdown转换成HTML而已了。很多内容需要你在Markdown文件里面就写明指定。另注:Jekyll虽然和Github Pages搭配免费,但其实是完全独立的产品。可以在任何地方使用,像Wordpress一样。安装Jekyll安装Jekyll需要用Ruby的包管理器gem下载,像Python的pip一样:$ gem install jekyll但是如果本机的gem版本不够新,是装不了jekyll的,所以就依照官网从ruby从头开始安装:sudo apt-get install ruby ruby-dev build-essentialecho ‘# Install Ruby Gems to ~/gems’ >> ~/.bashrcecho ’export GEM_HOME=$HOME/gems’ >> ~/.bashrcecho ’export PATH=$HOME/gems/bin:$PATH’ >> ~/.bashrcsource ~/.bashrcgem install jekyll bundler用Jekyll创建一个网站(自动生成名为test_blog的文件夹和一个完整的Demo网站):$ jekyll new test_blog目录里面内容如下:这里面是完整的一个网站,可以直接运行浏览。然后你就可以根据自己的主页、其它网页什么的,在这个基础上修改了。Jekyll new时发送错误:Bundler: ruby: No such file or directory我的Mac机上从来没做过任何Ruby项目,也不懂gem使用方法。全部原始配置后,使用gem install jekyll没问题,但是在jekyll new ..时,就发送这个错误:Bundler: ruby: No such file or directory – /usr/local/lib/ruby/gems/2.5.0/gems/bundler-1.16.1/exe/bundle (LoadError)发生错误后,项目文件夹是生成了,但是不完整,也不能执行。问题在于本机的gem和bundler都不是很新,需要更新一下。参考:https://github.com/rubygems/r…更新如下:# Install latest version of Rubygemsgem update –system# Install latest version of bundler system-widegem install bundler更新时间会很长,等全部安装好后,就可以正常的使用jekyll了。生成网站渲染网站$ cd test_blog$ jekyll serve或实时渲染网站:$ jekyll server –watch如果加上了–watch参数,jekyll就会实时监控你的文件,只要那个文件有变动了,比如新增了markdown文件,或修改了layout模板,它都会即时渲染生成网站,总保持更新。运行渲染的命令后,jekyll就会把你的Markdown根据指定的模板渲染为静态网站,同时还会把网站映射到本机的一个端口,你可以打开命令行里提示的url链接察看网站效果。允许公网访问如果jekyll部署在了公网上的服务器上,那么很轻松就可以公开给所有人访问了。语法如下:$ jekyll serve –detach –host 0.0.0.0# 或$ jekyll serve –force_polling -H 0.0.0.0 -P 4000然后就会显示如下:也就是说公网运行jekyll的话,程序就转到后台了,需要退出的话需要手动关闭进程。然后根据网站设计时候指定的端口,相应的在服务器防火墙上开放这个端口,比如4000。然后用http://服务器IP:4000这样的就能访问了。如果要不带端口号访问,就在_config.yml中把端口号设计为80。(但是经常有冲突,需要解决)Jekyll Workflow 工作流程使用Jekyll,主要难就在一开始,需要设计网页样式,设置全站的规则等等。但是一旦这些基本设置都完成了,以后更新就只需要专注的写Markdown文件即可。Jekyll自定义网站Jekyll new命令新建一个网站结构后,文件夹里面有很多文件。这些文件结构都是什么作用,是我们必须要学习的。Jekyll文件夹结构_config.yml文件:这是你第一个需要修改的东西。全网站的通用设置都保存在这里,比如网站主题,名称,介绍,域名,Github用户名等。.yml是像.ini一样的配置文件类型。_site文件夹:这个存放你的完整静态网站的文件夹,但是这是不需要你去碰的文件夹,它是Jekyll根据你的设置和模板之类的内容,自动生成的静态网站。_layout文件夹:是存放各种网页模板的地方,主页什么样子,列表页什么样子,博客内容页面什么样子,这些分别的页面模板都是放在这里的。_includes文件夹:存放所有重复使用的、比较固定的页面模块。比如每个网页都一样的页头、页脚,导航栏,侧边栏等等。这里面的HTML文件,都不是完整的HTML网页,都只是模块,可能只是一个<div>标签。_posts文件夹:存放所有的Markdown格式文件。你所有的Markdown博客内容,都放在这里。文件命名也是有规定的,比如必须是data-filename.markdown这种。注意:_site文件夹需要你在.gitignore中加入屏蔽,因为这个动态生成的东西,完全不需要在git里面进行追踪。而且放在Github Pages上的话,Github引擎也不会在你的目录里面生成这个文件夹,而是在后台直接给你生成页面。之所以会有它,主要是本地设计时候用。Front-Matter 文件头信息文件头信息在这里被叫做front-matter,或yml-header,它是写在每个Markdown文件头部的设置信息。主要是指明这篇文章标题、日期、使用的模板、样式、标签、分类等,这样Jekyll就可以根据这些设置把markdown文件转换成你想要的最终HTML网页了。头信息的常用参数如下:layout: 指明模板名称,即指定使用_layout文件夹中哪个HTML网页做为模板。title: 这篇文章的标题。data: 这篇文章的日期。categories: 这篇文章的分类。“真正的”拿到Jekyll生成的静态网站Jekyll的最终目标和整个存在意义都是生成静态网站。但是,默认情况下,所谓生成出来的静态HTML页面,你也不能直接打开看到效果!必须要运行jekyll serve才行,或者把它放到Github的Repo里。那还叫什么静态网站?!真正的静态网站不是生成HTML就行了,而是让你双击打开HTML就能在浏览器看到效果。避开这个有点矛盾的逻辑不说了,我们有比较方便的外部工具来做到这点。那就是最常用的wget下载命令。wget可以把网页或整个网站下载下来,并且能自动转换各种文件里的路径。命令如下:$ wget -r –convert-links <URL>所以当你运行Jekyll serve成功编译生成_site目录后,就可以用wget下载本地的这个网站了。Jekyll的体验目前体验极其糟糕:不能真正生成静态网站,必须开着Jekyll服务才能展示出网页Macbook air上运行jekyll服务器不到一会儿,CPU温度就极速增高大概几十篇文章,就需要10s+的生成时间各个主题安装极其不同,每个主题都需要单独学习其内在逻辑、变量、结构、生成方法,学习成本非常高依赖性极高,很容易导致gem或nodejs依赖过期无效或出错Jekyll对配置文件的tokens(比如指定变量名)经常改变和更新,很快你写的配置文件就不管用老报错了。 ...

January 24, 2019 · 1 min · jiezi

Jekyll 安装第三方模版

实际上,Jekyll安装主题是非常反人类的——它一点也不比自己写模版简单,学习成本真是高。安装主题不是把人家做好的template直接复制过来就能用了。每个模版设置的变量设置名、依赖的gem包都不一样,还经常需要在本地安装所有依赖包,安装jekyll插件等。如果不懂Ruby gem的话,还真是不简单。到了这里,一般人真的会问自己应不应该再继续下去。因为明明简单的东西,不知道是不是还值得了。我相信所有坚持学习jekyll的人,都有自己非学不可的理由吧。包管理器的理解Jekyll是用Ruby语言构建的,且每个主题都会有超多的Ruby依赖包。在这里需要先理解一些基本概念才能进行下去。Ruby:是语言。这就不说了Gem:全称RubyGems,是Ruby的包管理器。相当于Python的pip。每一个包都叫a gem,在Python里叫package.Bundler:是管理gem管理器的管理器……相当于Python的pipenv,管理每个项目的gem包依赖。简单说,gem主要管理整个系统的Ruby包,下载安装卸载之类。而Bundler只负责管理每个项目的Ruby包依赖。一般安装方法先讲讲一般通用的模板安装方法:首先到模版的Github网页里clone下来全部文件。在命令行里打开这个模版的文件夹(其实它就是一个完整的Jekyll文件夹结构)首先直接运行这个主题:$ jekyll serve如果没有出错能直接使用最好,出错的话就走下一步。输入以下命令安装模版所需的依赖环境:$ bundle install这样bundle命令就会会根据文件夹中的Gemfile文件下载安装所有模版所需的依赖环境。静等结束之后,一般就可以$ jekyll serve直接运行网站了。打开jekyll提示的网站,到处点一点,如果网站能正常运行,那么就可以把自己的markdown文章导入到_posts文件夹里了。然后在每篇markdown文章的Front Matter里,把theme改成这个模版的名称,layout改成这个模版要求的layout等。然后重新运行jekyll serve,开始运行服务。复制命令行里提示的本地url地址(每个主题的地址都不同),在浏览器里打开,就可以在网站上看到更新了。如果出错,可以试试下面命令来启动服务,强制服务在当前依赖环境下运行。$ bundle exec jekyll serve至此,一般简单的模版都可以搞定了。如果超出任何以上提及内容,我们就要到"特殊安装方法"一节来分析了。特殊安装方法一般安装方法解决不了的,基本上算是特殊安装方法了。经过我尝试了下载和安装几十个下载的主题后,发现如果碰见一个连bundle install命令都不用,直接jekyll serve就打开服务的,那简直是像中大奖一样的。每个主题的安装都不太一样,且遇到的错误都完全不同。通用性极其小。要想真正安装好一个主题,必须掌握基本的Debug能力,命令行信息的理解能力,如果精通Ruby那么就再好不过了。基本上我不打算在这里浪费时间把这些情况列出来讨论,只是想把坑分享出来,提醒你不要跳。如果不是100%确定真的想用这个主题,就不要浪费时间去调试和修改gem环境了,不值得。我的经验是:安装越麻烦的,模版本身其实反而更丑更差劲????。涉及Node.js技术的模版安装方法Github社区里的Jekyll模版流行使用nodejs的npm的gulp来编译scss这些东西。所以如果你没注意到主题的说明文档里提到的gulp, npm之类,就会发现用jekyll serve无法进行网站生成。这种情况下,只需要:安装Node.js -> 使用npm -> 安装gulp -> 命令行使用gulp编译网站中的css文件。不过大多数情况下你的机器已经自带了nodejs和npm(Windows除外),所以:$ cd <主题的目录># 安装此项目的依赖环境$ npm install# 编译此项目中的相关文件$ gulp run小1分钟后,就会看到gulp开启了一个端口,并自动打开了你的chrome浏览器,打开了这个项目的网页(你会看到无法显示出正常效果,因为这里gulp这是用来编译css的,它运行不了jekyll项目)。然后ctrl+c退出,再打开jekyll命令编译网站就行了-_-!吐槽一下:请回想,为了安装个jekyll和主题,此时你已经经历了一个真的不算短的学习历程了:GitHub Pages -> Jekyll框架 -> .yml文件语法和配置 -> Liquid动态语言 -> Ruby -> gem -> bundle -> HTML+CSS+JS -> nodejs -> npm -> gulp……这其中哪一步都值得说上一段时间。然后回想起当初,其实你只是想在GIthub Pages里建个静态网页而已。常见问题运行Jekyll serve 总报错: ERROR `/sw.js’ not found根据这个Stackoverflow的回答:sw.js是Service worker的意思,是自动生成的。基本上不会造成什么影响,但是主要出现这个错误,jekyll就没法同步更新。根据我的实际体验,这不是主题的问题,而是jekyll的问题:对每个主题都报有这个错误。

January 24, 2019 · 1 min · jiezi

一篇文章了解Liquid Template Engine 模版引擎 (Jekyll模版)

学习制作Jekyll模版,其实主要是学习Liquid语法。参考:Liquid官方文档。就像PHP、ASP、Python等一切网络动态语言一样,Liquid也相当于一种独立的动态语言,没什么大差别,基本功能都有。说白了就是动态生成HTML,可以输出变量,操作数组,调用外部数据,设置IF ELSE判断,FOR循环等,这些都能达到。开始讲语法前,大概说明一下运行流程:常用变量及属性参考:Jekyll 语法简单笔记site对象site对象是全站都能调用的变量,全部都在_config.yml文件中定义。常用变量如下:site.pages: 所有`_site.posts: 所有文章site.categories: 所有的 categoriessite.tags: 所有的 tagssite.related_posts: 从LSI Keywords提取出来最相关最新的10篇文章site.collections: 所有集合(与posts逻辑很大不同,一般用来放members等特殊数据)site.documents: 所有 collections 里面的文档site.data: _data 目录下的数据site.[abc]: 自定义的变量(手动在_config.yml中指定)page对象page.content: 页面的内容page.title: 标题 (手动在Front Matters中指定)page.excerpt: 摘要page.url: 链接page.date: 时间page.id: 唯一标示page.categories: 分类(手动在Front Matters中指定)page.tags: 标签(手动在Front Matters中指定)page.path: 源代码位置page.next: 下一篇文章page.previous: 上一篇文章categories对象从site.categories列表中循环得到的是一个一个的category,其中包括这些属性:cat[0]: 返回cat的名称cat[0].size: 返回这个分类里的文章数量cat[1]: 返回一个post_list列表,包含这个category里所有的post对象。cat[1].size: 返回这个post_list列表中的对象数量。tag对象从site.tags列表中循环得到的是一个一个的tag,其中包括这些属性:tag[0]: 返回tag的名称tag[0].size: 返回这个tags里的文章数量tag[1]: 返回一个post_list列表,包含这个tags里所有的post对象。tag[1].size: 返回这个post_list列表中的对象数量。paginator对象paginator.per_page: 每一页的数量paginator.posts: 这一页的数量paginator.total_posts: 所有文章的数量paginator.total_pages: 总的页数paginator.page: 当前页数paginator.previous_page: 上一页的页数paginator.previous_page_path: 上一页的路径paginator.next_page: 下一页的页数paginator.next_page_path: 下一页的路径列表读取(各种归档页面用)循环读取Posts读取全站所有的posts:{% for post in site.posts %} <h2> {{ post.title }} </h2> <h2> {{ post.url }} </h2> <h2> {{ post.category }} </h2> <h2> {{ post.excerpt }} </h2> ︎ 文章摘要,自动生成的{% endfor %}只读取_posts/文件夹中某个category中的posts,例如_posts/tech文件夹中放的是一些category为tech的文章,那么读取方式是:{% for post in site.categories.tech %} <h2> {{ post.title }} </h2>{% endfor %}注意,在_posts中nested文件夹里的文章,也必须在Front matter中指定分类,要不然读不出来。循环读取categories读取全站所有的分类:{% for cat in site.categories %} <h2> {{ cat[0] }} </h2>{% endfor %}读取所有分类下的所有文章:{% for cat in site.categories %} {% for post in cat[1] %} <h2> {{ post.title }} </h2> {% endfor %}{% endfor %}读取某个分类下所有的文章:{% for post in site.categories.blog %} <h2> {{ post.title }} </h2>{% endfor %}循环读取tags读取全站所有的tags:{% for tag in site.tags %} <h1> {{ tag[0] }} </h1>{% endfor %}读取所有tags下的所有文章:{% for tag in site.tags %} {% for post in cat[1] %} <h2> {{ post.title }} </h2> {% endfor %}{% endfor %}读取某个tag下所有的文章:{% for post in site.tags.math %} <h2> {{ post.title }} </h2>{% endfor %}读取某category下所有文章并按tag分组读取{% for post in site.categories.Tech %} ︎ 先读取某分类下所有的文章 {% assign tags = tags |concat: post.tags |uniq %} ︎ 把每篇文章的tags存到列表里,并删除重复项{% endfor %}{% for tag in tags %} <h2> {{ tag }} </h2> ︎ 循环输出这个category中的所有tags {% for post in site.categories.calculus %} {% if post.tags contains tag %} ︎ 循环判断如果文章属于此tag则显示出来 <h4> {{ post.title }} </h4> {% endif %} {% endfor %}{% endfor %}Post读取需要在MD文档里指定layout才能调用。比如文档里指定了layout: post,那么系统就找到_layouts/post.html这个文件;如果文档指定了layout: blog,那么系统就会找到_layout/blog.html这个文件。在layout里面读取post数据很简单,不需要for循环,不需要if判断,直接用post这个对象就行。因为系统已经把文章的数据传过来了。假如我们在_posts/xx.md文章的头信息中,定义了这些数据:—layout: posttitle: I’m a postcategory: ‘blog’tags: [‘jekyll’, ‘wordpress’, ‘blog’]—(注:tags列表等,在yaml中可以用- tag或[’tag’]表示,一样的 )以下就是这个post.html文件读取post数据的方式:<h2> {{ post.title }} </h2><h2> {{ post.category }} </h2><h2> {{ post.content }} </h2>{% for tag in post.tags %} <h2> {{ tag }} </h2>{% endfor %}group_by 分组和where_exp条件筛选官方的group_by做到了复杂查询的功能,比如查找某个category下的全部文章并按tag分组显示。相对自己写for/if实现来说,虽然官方提供了这个功能,但是你仔细阅读文档就会发现,这个group_by必须配合单独的静态的额外的文档才能实现。也就是说,你必须手动写个mygroup.doc文件,一个一个指定每篇文章的分组、分类、顺序等。那实在太麻烦了。参考官方:Navigation ...

January 24, 2019 · 2 min · jiezi

jekyll Could not load Bundler. Bundle install skipped.

安装Jekyll的时候出现错误,提示Could not load Bundler. Bundle install skipped. 然后使用Jekyll serve的时候提示 没有运行所需的bunddle,从stackoverflow上找到的答案安装Jekyll的时候出现错误,提示Could not load Bundler. Bundle install skipped. 然后使用Jekyll serve的时候提示 没有运行所需的bunddle,从stackoverflow上找到的答案 gem install jekyll bundler jekyll new my-awesome-site cd my-awesome-site bundle install bundle exec jekyll serve# => Now browse to http://localhost:4000

October 24, 2017 · 1 min · jiezi