资讯专栏INFORMATION COLUMN

Wordpress博客迁移至Jekyll过程总结

高胜山 / 2593人阅读

摘要:想来想去还是想试试把我的博客转成一方面为了管理另一方面实在是感觉请求过多速度太慢可改造性太差经过迁移后默认主题速度杠杠的显示时间不到哦安装本文在环境下操作环境需要比较懒貌似自带还是啥时候装了不会的自己搜一下安装和目前最新稳定版本是自带源的版

想来想去还是想试试把我的博客转成Jekyll, 一方面为了git管理, 另一方面实在是感觉请求过多速度太慢, 可改造性太差. 经过迁移后, 默认主题, 速度杠杠的, 显示时间不到500ms哦~
安装Jekyll
本文在CentOS7环境下操作.
环境需要

Ruby

RubyGems

NodeJS

Python 2.7(Whidy比较懒, 貌似CentOS7自带? 还是啥时候装了, 不会的自己搜一下= =.)

安装Ruby2.5.0和RubyGems
目前最新稳定版本是2.5.0, CentOS自带源的版本比较老, 我们需要第三方源rbenv来安装最新稳定版, 安装方法如下:

安装rbenvRuby依赖的组件

# yum install -y git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel

安装rbenvrub-build(务必在非root用户的home下面操作)

# cd ~
# git clone git://github.com/sstephenson/rbenv.git .rbenv
# echo "export PATH="$HOME/.rbenv/bin:$PATH"" >> ~/.bash_profile
# echo "eval "$(rbenv init -)"" >> ~/.bash_profile
# git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# echo "export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"" >> ~/.bash_profile
# source ~/.bash_profile

查看当前可安装的Ruby版本

# rbenv install -l

安装目前最新稳定版本2.5.0

# rbenv install -v 2.5.0
# rbenv rehash

rbenv rehash的作用是有多个Ruby版本的时候要执行的

检查安装是否成功

# rbenv versions

设置为全局(否则ruby命令无法使用?)并检测版本是否正确

# rbenv global 2.5.0
# ruby -v

可选/必选安装bundle, 因为参考的安装资料包含Rails, 所以这个是否必须安装尚不确定, 如果同时需要Rails, 可以查看底部的参阅文档.

# gem install bundler

实际上整个安装过程已经把RubyGems安装好了?

参阅:

Install Ruby on Rails with Rbenv on CentOS 7

其它:

安装Ruby-官方文档

安装NodeJS

这个比较简单, 直接安装就好了

# yum install nodejs
用 RubyGems 安装 Jekyll
$ gem install jekyll
创建一个Jekyll站点

接下来在当前用户的目录下创建一个博客站点并开启服务

# cd ~
# jekyll new blog
# cd blog
# jekyll serve --host 0.0.0.0

此时打开浏览器访问[server ip]:4000即可.(例如http://118.0.156.000:4000/)

示例页面: http://daily.whidy.net/

参阅: http://jekyllcn.com/docs/inst...

Wordpress站点迁移至Jekyll全过程
官方有迁移文档, 支持很多种类型的博客迁移, 所以看起来也就比较简单了, 官方文档Import your old & busted site or blog for use with Jekyll., 我们来尝试Wordpress迁移.

先按照他的示例, 按照自己的网站进行修改, 大致如下

$ ruby -rubygems -e "require "jekyll-import";
    JekyllImport::Importers::WordPress.run({
      "dbname"   => "yourWordpressDatabaseName",
      "user"     => "root",
      "password" => "IcannotTellYou",
      "host"     => "localhost",
      "port"     => "3306",
      "socket"   => "",
      "table_prefix"   => "wp_",
      "site_prefix"    => "",
      "clean_entities" => true,
      "comments"       => true,
      "categories"     => true,
      "tags"           => true,
      "more_excerpt"   => true,
      "more_anchor"    => true,
      "extension"      => "html",
      "status"         => ["publish"]
    })"

保证配置无误后, 回车, 执行报错!

Traceback (most recent call last):
        1: from /home/whidy/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require"
/home/whidy/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require": cannot load such file -- ubygems (LoadError)

蛋疼, 查了下资料说可能是rubygems的bug, 参阅[Ruby [SOLVED]: After ruby update to 2.5.0, require "bundler/setup" raise exception](http://www.cloudypoint.com/Tu... 然后看了下, 貌似真的是的, 立马升级

$ gem update --system

我说gem安装非常坑爹, 毫无提示, 都不知道是不是正在处理执行的命令, 其实已经在执行了, 根据网络情况多等待一下. 接着唰唰唰的出来一大段, 一直到出现RubyGems system software updated, 就更新完了, 我们再尝试迁移命令... 又报错!!!

Traceback (most recent call last):
        2: from -e:1:in `
" 1: from /home/whidy/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require" /home/whidy/.rbenv/versions/2.5.0/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require": cannot load such file -- jekyll-import (LoadError)

蛋疼, 上次不是装了吗, 还是我记错了. 好吧再装一遍

$ gem install jekyll-import

然后再执行, 反复报错... 于是反复执行各种依赖包... 总结如下

$ gem install sequel
$ gem install unidecode
$ gem install mysql2

这里说要mysql2, 然后执行上面的命令报错, 又说要mysql-devel, 服了- -, 那只能一步步试试看了.

$ yum install mysql-devel

接着试

$ gem install mysql2

再跑迁移命令, 继续报错... 信息如下

         1: from /home/whidy/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gem
/home/whidy/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/mysql2-0.5.0/li
111) (Sequel::DatabaseConnectionError)

查到说是要填写刚才迁移命令里面的socket, 这个填啥呢, 我查了半天有各种各样的, 比如/var/run/mysqld/mysqld.sock, /tmp/mysql.sock等等, 可能是他们都是mysql, 而我是MariaDB, 为了从根本问题上下手, 还是看看我的MariaDB的配置文件里面怎么写的吧.

这里需要说明的是, 我的Wordpress数据库和要迁移到的Jekyll都在同一服务器上, 因此host这里填写的是localhost
$ sudo vi /etc/my.cnf

查到socket=/var/lib/mysql/mysql.sock, 那么修改迁移配置如下:

$ ruby -rubygems -e "require "jekyll-import";
    JekyllImport::Importers::WordPress.run({
      "dbname"   => "yourWordpressDatabaseName",
      "user"     => "root",
      "password" => "IcannotTellYou",
      "host"     => "localhost",
      "port"     => "3306",
      "socket"   => "/var/lib/mysql/mysql.sock",
      "table_prefix"   => "wp_",
      "site_prefix"    => "",
      "clean_entities" => true,
      "comments"       => true,
      "categories"     => true,
      "tags"           => true,
      "more_excerpt"   => true,
      "more_anchor"    => true,
      "extension"      => "html",
      "status"         => ["publish"]
    })"

慢慢的, 从前面十几条错误, 减少到了最后一条

Could not require "htmlentities", so the :clean_entities option is now disabled.

看来还是比较成功的... 那就装一个试试看吧

$ gem install htmlentities

安装后, 再次执行迁移命令, 搞得心都要碎了... 复制粘贴回车...

额, 没. 有. 任. 何. 反. 应. 的. 结. 束. 了... 难道成功了?

在安装Jekyll的目录下编译一下看看...

[whidy@VM_0_3_centos blog]$ jekyll b

又报错...

Configuration file: /home/whidy/blog/_config.yml
            Source: /home/whidy/blog
       Destination: /home/whidy/blog/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
     ...此处省略字数 哈哈哈...
     Build Warning: Layout "nav_menu_item" requested in _posts/2012-11-27-1132.html does not exist.
  Liquid Exception: Liquid syntax error (line 40): Variable "{{$r["catid"]}}" was not properly terminated with regexp: /}}/ in /home/whidy/blog/_posts/2012-11-29-phpcms-page-solution.html
jekyll 3.7.3 | Error:  Liquid syntax error (line 40): Variable "{{$r["catid"]}}" was not properly terminated with regexp: /}}/

查了下大概是说Liquid的正则规则, 面对{{这种玩意就挂了. 把它改成{ {, 参阅: Liquid Exception: Variable "{{ {0}" was not properly terminated with regexp: /}}/ in #466, 然后我就去_posts目录把这篇文章手动改了... 再jekyll b一下.

[whidy@VM_0_3_centos blog]$ jekyll b
Configuration file: /home/whidy/blog/_config.yml
            Source: /home/whidy/blog
       Destination: /home/whidy/blog/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
      ... 几十条这样的信息开始...
     Build Warning: Layout "nav_menu_item" requested in _posts/2012-11-27-1107.html does not exist.
     ... 几十条这样的信息结束...
     Build Warning: Layout "bnfw_notification" requested in _posts/2018-01-16-%e8%af%84%e8%ae%ba.html does not exist.
     Build Warning: Layout "nav_menu_item" requested in _posts/2018-02-26-3119.html does not exist.
                    done in 9.708 seconds.
 Auto-regeneration: disabled. Use --watch to enable.

这样就算完成了? 刷新一下我才配置的Nginx二级域名页面, 方法大致如原文, 我靠, 昨天不是搞好了403错误吗? 咋又来, 不过不怕, 已经知道是权限问题了, 我们在分析下哪里出问题. (然后一阵胡乱修改权限后就好了- -,), 我认为估计有效的命令是这一条

# chmod 755 -R /home/whidy/blog/

然后刷新页面, 就好了. 当然我这是裸奔的Jekyll, 没有主题, 所以看起来很朴素. 不过还是有些问题的.

比如, 之前加密的单页面被放在导航上了. 文章列表中有一些带数字的文章, 还有评论, 这些本不该存在- -, 所以迁移后的优化也是少不了的, 不过至此关于Wordpress迁移到Jekyll的工作已经完成.

迁移后的思考

迁移完成后, 也有一些问题是需要解决的, 大致想到的如下

现有的不正确内容的修正(资源文件管理, 文章内图片的链接等)

主题及相关功能开发

评论系统的植入, 考虑使用disqus

seo方面, url规则匹配旧的wordpress(考虑Nginx定向或其他方案)

其他暂未想到...

如果你也想把wordpress站点内容迁移至Jekyll, 阅读该文中发现错误, 或者通过该文示例过程中的尝试发生了一些无法解决的问题, 欢迎留言~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39853.html

相关文章

  • 技术存档:建站(一)

    摘要:自建主要花费在购买云服务器上和静态资源托管上,剩余工作一力承担。 写这系列文章的初衷是:对自己知识面广度和深度的确定,并以此调整后续的发展和学习方向。希望能达到温故而知新的效果。 选择从建站入手,是因为这个是最常见的要求。对于公司而言,网站是展示公司主旨、业务、沟通方式、宣传营销的必选方案,一个符合公司形象的高质量官网,必然能让客户留下良好的第一印象。,对个人而言,博客是表达其特有的思...

    chnmagnus 评论0 收藏0
  • 打造一个“精致的”个人博客

    摘要:百度统计先注册个百度统计的账号站长账号,适合个人博客,注册成功后按照提示,把代码复制到中的的标签里这里特指我的博客文件好了,这样你的博客就差不多了,是不是感觉很酷今天就到这儿,下篇文章见。 我为什么要写博客?其实我最初打算写博客,原因很简单,我就是想把工作中、学习中遇到 的问题及解决方案记录下来,它能帮你梳理下整个过程的要注意的地方,写写你在工作中遇到的问题,用来记录和回顾。Tips:...

    用户83 评论0 收藏0
  • Repractise架构篇一: CMS的重构与演进

    摘要:重构系统是一项非常具有挑战性的事情。架构与说起来,我一直是一个党。如下图是采用的架构这与我们在项目上的系统架构目前相似。而这是大部分所不支持的。允许内容通过内容服务更新使用于是,有了一个名为的框架用于管理内容,并存储为。 重构系统是一项非常具有挑战性的事情。通常来说,在我们的系统是第二个系统的时候才需要重构,即这个系统本身已经很臃肿。我们花费了太量的时间在代码间的逻辑,开发新的功能变得...

    William_Sang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<