这篇文章是从我的Jekyll静态博客搬过来的,虽然已经不再使用,但不得不承认静态博客的诸多优越性,以及Jekyll确实是个很好的平台。写作时,我才刚开始倒腾,现在再看这些问题真的太简单了。。不过有一点不容忽视的是Windows在一些情况下确实比Linux复杂,比如命令行模式下。这篇文章的内容基于Windows 10。
原文
这个博客是用Jekyll搭建的,之前GitHub已经有集成好的Jekyll环境,我直接Fork了一个主题就开始用了。之后做了一些外观和功能方面的调整,觉得每一步调整都要git上去挺费时间的(虽然GitHub Desktop已经做得挺不错了),所以我需要在本地搭建一个Jekyll环境,可以直接在本地调试。下面记录了我安装的过程以及遇到的一些问题,希望后来人可以少走弯路。
以下是Windows下搭建Jekyll环境的大致流程:
- 安装Ruby
- 安装MSYS2
- 安装Ruby DevKit
- 切换到RubyGems国内镜像
- 安装Jekyll
- 开启Jekyll服务
我会把每一步自己遇到的问题几下来的。
1. 安装Ruby
Jekyll是基于Ruby的,所以首先安装Ruby。官网选择正确版本安装即可。
安装后输入ruby -v
以定是否安装成功。
2. 安装MSYS2
这一步不知道是不是只有我会遇到,与bash shell有关,这个安装完Ruby后会自动跳出来的,根据提示选择版本即可,因为我不会用到高级功能,所以我选了第一个basic。
3. 安装Ruby DevKit
在刚才的Ruby官网滑到下面有一个DEVELOPMENT KIT,选择合适版本,注意下载的文件运行时让选择的解压路径就是最后的安装路径。
安装后输入gem -v
以确定是否安装成功。
如果成功,cd到安装路径,陆续输入:
$ ruby dk.rb review
$ ruby dk.rb init
$ ruby dk.rb install
看到下面的输出:
[INFO] Updating convenience notice gem override for 'E:/jekyll/ruby'
[INFO] Installing 'E:/jekyll/ruby/Ruby24-x64/lib/ruby/site_ruby/devkit.rb'
4. 切换到RubyGems国内镜像
为了提速,官方镜像非常慢,如果有梯子和耐心可以跳过这步。
切换到Ruby China:
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem sources -l
*** CURRENT SOURCES ***
https://gems.ruby-china.org
# 请确保只有 gems.ruby-china.org
$ gem install rails
下载完成后最后一行显示如下,之后可以安装Jekyll了。
Done installing documentation for safe_yaml, rouge, forwardable-extended, pathutil, mercenary, liquid, kramdown, ffi, rb-inotify, rb-fsevent, listen, jekyll-watch, sass, jekyll-sass-converter, colorator, public_suffix, addressable, jekyll after 75 seconds
18 gems installed
5. 安装Jekyll
$ gem install jekyll
安装后输入jekyll -v
确认安装成功。
6. 开启Jekyll服务
最麻烦的从这里开始。
我已经有自己的博客了,所以不需要新建,如果新建请参看官方教程。
首先把我的文件clone到本地:
$ git clone git@github.com:ad-adam/mashirozx.github.io.git
#以上是我的博客fork版,状态停留在写这篇博客的时候,以保证步骤的可重复性,此处的git为非必要步骤
#如果要在本地已有目录中启动预览,直接如下cd即可
$ cd mashirozx.github.io
理论上,之后运行jekyll serve
就能在http://localhost:4000/中看到我的页面了,可是我却看到了以下报错:
E:/jekyll/ruby/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.1/lib/bundler/resolver.rb:396:in 'block in verify_gemfile_dependencies_are_found!': Could not find gem 'jekyll (~> 3.2.1) x64-mingw32' in any of the gem sources listed in your Gemfile.
(Bundler::GemNotFound)
from ...
#以下是一串from,省略
注意到第一句Bundler::GemNotFound
,所以运行:
$ bundle install
输出倒数第四行看到“Thank you for installing html-pipeline!”就可以了。再次运行jekyll serve
,又一次报错,这次是:
E:/jekyll/ruby/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.1/lib/bundler/runtime.rb:317:in 'check_for_activated_spec!': You have already activated jekyll 3.4.3, but your Gemfile requires jekyll 3.2.1. Prepending `bundle exec` to your command may solve this.
(Gem::LoadError)
纳尼,Jekyll版本太高?这都不行(;Д;)
好吧,我想应该有两个方法:一是降版本,二是修改Gemfile中的版本(在博客根目录中)我选择了前者。
$ bundle exec gem uninstall jekyll -v 3.4.3
$ bundle exec gem install jekyll -v 3.2.1
至此,问题解决,注意以上问题不是环境问题,只是版本与主题不对应。新版一定是有它的优势的,所以不一定要选择降级,不过我担心和主题不兼容,所以选择了降级。
再次运行jekyll serve
,显示:
Auto-regeneration: enabled for 'E:/jekyll/myblog/mashirozx.github.io'
Configuration file: E:/jekyll/myblog/mashirozx.github.io/_config.yml
jekyll 3.2.1 | Error: Permission denied - bind(2) for 127.0.0.1:4000
127.0.0.1:4000端口被占用???发誓找出这个占用的软件一定要把它灭了????。
CMD中输入netstat -ano
查看网络端口占用情况,找到下面几条记录:
TCP 127.0.0.1:4000 0.0.0.0:0 LISTENING 2836
TCP 127.0.0.1:4000 127.0.0.1:6675 CLOSE_WAIT 2836
TCP 127.0.0.1:4000 127.0.0.1:7342 CLOSE_WAIT 2836
可以看到4000端口被一个PID=2836的程序占用,继续揪出来,输入tasklist /svc /FI "PID eq 2836"
看到:
映像名称 PID 服务
========================= ======== ============================================
FoxitProtect.exe 2836 FxService
晕,福昕阅读器的保护服务,考虑到福昕阅读器挺好用的,这次选择原谅它吧,不过现在要把这个服务干掉,打开任务管理器->服务->FxService,右键干掉。
重新输入jekyll serve
,终于看到:
Auto-regeneration: enabled for 'E:/jekyll/myblog/mashirozx.github.io'
Configuration file: E:/jekyll/myblog/mashirozx.github.io/_config.yml
Server address: http://127.0.0.1:4000/
Server running... press ctrl-c to stop.
此时可以进入http://localhost:4000/查看了。
以上です。
Mashiro 2017/6/5
「樱花庄的白猫」原创文章:《Windows下本地配置Jekyll》,转载请保留出处!https://2heng.xin/2017/06/05/jekyll/
Q.E.D.
Comments | NOTHING