25 January 2017

用github pages做个人站点有一段时间了,用的是jekyll的一个模版jekyll-bootstrap。 之前一直没有在本地运行起来,最近出差晚上实在无聊,就在本地跑起来咯。

先说参考文档:http://jekyll-windows.juthilo.com/。 照着上面步骤做,基本没什么问题,我下面除了再重复下文档中的步骤以外,再记录下期间遇到的坑。

安装ruby

好吧,这个没什么说的,自己下载安装吧

安装DevKit-mingw64

  • 下载后加压,假设解压到目录: C:\RubyDevKit,解压完毕后dos窗口切换到该目录。

  • 执行面两个命令:

      ruby dk.rb init //初始化生成配置文件
      ruby dk.rb install //安装
    

安装jekyll gem

  • 执行命令:

    gem install jekyll

注意:这里由于网络原因可能会安装失败,多试几次,拼人品的时候到了,不行就搬梯子^_^

运行网站

  • 假设你的个人站点在d:\mywebsite
  • dos窗口进入上面目录,执行命令:

    jekyll serve

  • 访问:http://127.0.1:4000

解决乱码问题

  • 打开http://127.0.1:4000首页显示没有问题,点击打开具体一篇文章的时候报错,jekky使用中文标题做url,但是编码问题导致无法访问。

解决方法:

  • 修改${ruby_home}\lib\ruby\2.0.0\webrick\httpservlet\filehandler.rb文件265行,prevent_directory_traversal方法中
  • 注释掉:

      # path = req.path_info.dup.force_encoding(Encoding.find("filesystem"))
    
  • 增加:

      path = req.path_info.dup.force_encoding(Encoding.find("filesystem"))
      puts "path:#{path}---#{path.encoding}"
      #change the path encoding interpreter
      path.force_encoding('UTF-8')
      puts "path:#{path}---#{path.encoding}"
    
  • set_filename 方法中:

      res.filename = @root.dup
    
  • 更改为:

      puts "system encoding: #{Encoding.find("filesystem")}"
      res.filename = @root.dup
      puts "res.filename encoding:#{res.filename.encoding}"
      puts "req.path_info.encoding:#{req.path_info.encoding}"
    
  • 并在:

      break if base == "/"
    
  • 后面增加:

      base.force_encoding("UTF-8")
    
  • 最后为:

        def set_filename(req, res)
          puts "system encoding: #{Encoding.find("filesystem")}"
          res.filename = @root.dup
          puts "res.filename encoding:#{res.filename.encoding}"
          puts "req.path_info.encoding:#{req.path_info.encoding}"
          path_info = req.path_info.scan(%r|/[^/]*|)
    
          path_info.unshift("")  # dummy for checking @root dir
          while base = path_info.first
            break if base == "/"
            base.force_encoding("UTF-8")
            break unless File.directory?(File.expand_path(res.filename + base))
            ......
    

附上相关软件及其版本

上面问题都是基于下面软件和版本执行的:





Fork me on GitHub