Ruby
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言 Ruby 教程
Gem
RubyGems 是 Ruby 的一个包管理器,它提供一个分发 Ruby 程序和库的标准格式,还提供一个管理程序包安装的工具。RubyGems 旨在方便地管理 gem 安装的工具,以及用于分发 gem 的服务器。这类似于 Ubuntu 下的apt-get, Centos 的 yum,Python 的 pip。 Ruby RubyGems
本地Jekyll环境搭建
目的
为实现Jekyll博客的本地预览
安装Jekyll
-
Ubuntu环境:
-
Windows环境:
- 下载Ruby Installer并安装(记得勾选加入环境变量)
gem install jekyll
运行已有项目
-
切换到项目根目录(即Gemfile所在目录),运行cli.bat(实际分为以下两步)
-
安装依赖
bundle install
,会根据Gemfile安装依赖的gem包,并生成Gemfile.lock文件 -
启动服务
bundle exec jekyll serve --watch --host=127.0.0.1 --port=8899
(8899可以更改为其他端口号)或直接bundle exec jekyll serve
If you’re not using a
Gemfile
you can just runjekyll serve
You can now prefix all jekyll commands listed in this tutorial with
bundle exec
to make sure you use the jekyll version defined in yourGemfile
. -
-
浏览器打开<127.0.0.1:8899>
命令介绍
-
jekyll s --host=`hostname -I` --port=4001
:监听本机ip的4001端口(WSL中很好用) -
jekyll new <myblog>
会根据默认模板创建一个站点,里面包含index,Gemfile等一些文件 -
bundle exec jekyll serve --drafts
可以显示位于_drafts
下的草稿(若未设定日期,则使用文件修改时间作为日期)
可能出现的问题
-
win10命令行乱码:
运行cli.bat前,先执行
CHCP 65001
,更改编码(字符集)为utf-8 -
过长(超过4个汉字)的中文文件名无法本地预览:
打开
C:\Ruby27-x64\lib\ruby\2.7.0\webrick\httpservlet\filehandler.rb
(安装路径可能不同)path = req.path_info.dup.force_encoding(Encoding.find("filesystem")) # 加入下面这行 path.force_encoding("UTF-8") # 加入编码 if trailing_pathsep?(req.path_info)
break if base == "/" # 加入下面这行 base.force_encoding("UTF-8") # 加入编码 break unless File.directory?(File.expand_path(res.filename + base))
重启jekyll serve,OK
参考博客:https://blog.csdn.net/yinaoxiong/article/details/54025482
文件说明
- Gemfile:指明需要的依赖包
参考资料
YAML Front Matter
任何包含YAML front matter块的文件都将由Jekyll作为特殊文件进行处理。Front Matter必须是文件中的第一个事物,并且必须采用在三条虚线之间设置的有效YAML的形式。
功能扩展
GitHub Pages默认运行在safe
模式,仅支持部分gem包
利用GitHub Action,部署包含任意gem包的Jekyll站点:jekyll-deploy-action
语法高亮
文章目录
Implement Scroll Spy in Jekyll without Bootstrap
Emoji支持
Jekyll + Jemoji : How to config emoji size?
文章更新日期
由于Git不会保留文件的修改时间(?),pull下来的文件修改时间会变成当前时间,目前找到2种获取修改时间的方案(大概):
- 在
.md
文档的yaml front matter中写入最后修改时间(hardcode),Python有专门处理Front Matter的包,可以批量操作,比较方便 -
git log -1 --format="%ct" <file_name>
获取文件的UNIX timestamp,通过插件为每篇文章设置修改时间;这种方法在本地可行,但是提交到GitHub后,无法通过该命令获取提交记录