hexoblog 搭建遇到的问题

需要js版本

js版本过高会导致调用hexo g 命令时出现问题。建议使用node.js 12以下版本,我用的是v12.18.3
历史版本下载可以参考如下链接
https://nodejs.org/en/download/releases/
如果想要管理多个版本的node,可以通过nvm管理,nvm下载和安装可以自行百度。

external_link 错误
我们可能会遇到如下问题,当我们执行hexo g 时

hexo版本更新报错:INFO Validating config WARN Deprecated config detected: “external_link“ with a Boolean
解决方案是
将原有的

external_link:
  enable: true|false

修改为

external_link:
  enable: true # Open external links in new tab
  field: site # Apply to the whole site
  exclude: ''

执行hexo clean ,然后再次hexo g 生成文章。

遇到乱码

hexo s 运行后打开网页显示如下乱码

{% extends '_layout.swig' %} {% import '_macro/post.swig' as post_template %} 
{% import '_macro/sidebar.swig' as sidebar_template %} 
{% block title %}{{ config.title }}
{% if theme.index_with_subtitle and config.subtitle %} - 
{{config.subtitle }}{% endif %}{% endblock %} {% block page_class %} 
{% if is_home() %}page-home{% endif -%}
 {% endblock %} {% block content %} {% for post in page.posts %} 
{{ post_template.render(post, true) }}
 {% endfor %} {% include '_partials/pagination.swig' %} 
{% endblock %} {% block sidebar %} {{ sidebar_template.render(false) }} {% endblock %}

则需要单独安装 hexo 的渲染包

npm i hexo-renderer-swig

因为hexo5.0之后render包不进入hexo主干代码里,需要单独安装。
安装好后执行hexo clean, 然后执行hexo g 生成代码,再次运行hexo s
打开网页查看可以正常显示。

hexo 发布问题

如果hexo d 遇到如下问题

Error: Host key verification failed.

此时需要在本机生成ssh key,将ssh key 配置到github或者gitee的ssh管理里,如果博客是挂在github上就将key写入github的ssh。
如果博客是挂在gitee上就将key写入gitee的ssh管理里。
详见我的另一篇文章https://www.limerence2017.com/2017/08/24/hexoblogs/

将hexo 和github 关联起来
还是编辑根目录下_config.yml文件

deploy:
    type: git
    repo: git@github.com:secondtonone1/secondtonone1.github.io.git  #这里的网址填你自己的
    branch: master
```   
保存后需要提前安装一个扩展:
``` cmd
npm install hexo-deployer-git --save

安装该扩展主要是为了支持hexo d 命令。

接下来就是将Hexo部署到我们的Github仓库上:
命令行输入 hexo d 会自动将当前的博文生成html并且发布到github进行托管,在浏览器输入 secondtonone1.github.io (secondtonone1用户名替换为你自己的)即可浏览自己的博客了。这样就完成了github和hexo的关联部署。值得改进的地方是,每次调用hexo d 上传到github,都会提示输入github的用户名和密码,非常不方便
可以通过SSH keys的设置,达到不输入密码直接发布的目的。

SSH keys的配置

在Git 命令行输入如下命令:

$ ssh-keygen -t rsa -C "secondtonone1@163.com"

secondtonone1@163.com 替换为你的github邮件地址
Git显示:

$ ssh-keygen -t rsa -C "secondtonone1@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<回车>

系统会要求你输入密码,这里设置的密码主要是在你提交Git时弹出密码认证,不想输入直接回车

Enter passphrase (empty for no passphrase):<输入加密串>
Enter same passphrase again:<再次输入加密串>

配置ssh和github仓库

找到id_rsa.pub 并复制文件内容
id_rsa.pub文件一般位于电脑用户配置文件夹下的一个.ssh文件下C:Users你的用户名.ssh
登录Github并添加密钥
进入github首页在右上角选择settings设置。

测试通过git bash链接到Git

链接Git

$ ssh -T git@github.com

提示如下:

yes
The authenticity of host 'github.com (207.65.227.44)' can't be established.
RSA key fingerprint is 16:27:42:18:60:1d:7b:13:d2:b5:c4:20:7e:56:86:d8:71:f3
Are you sure you want to continue connecting (yes/no)?
以下为成功链接到Git

Hi XXXX! You've successfully authenticated, but GitHub does not provide shell access.

以后每次提交博文到github就不需要输入密码了,很方便。配置好后清除之前的记录,重新生成并提交,可以登录自己的github仓库地址(secondtonone1@163.com)查看博文了

hexo clean
hexo g
hexo d


热门评论

热门文章

  1. vscode搭建windows C++开发环境

    喜欢(596) 浏览(107260)
  2. 使用hexo搭建个人博客

    喜欢(533) 浏览(15601)
  3. Linux环境搭建和编码

    喜欢(594) 浏览(17193)
  4. MarkDown在线编辑器

    喜欢(514) 浏览(17629)
  5. 聊天项目(28) 分布式服务通知好友申请

    喜欢(507) 浏览(7996)

最新评论

  1. C++ 线程池原理和实现 mzx2023:两种方法解决,一种是改排序算法,就是当线程耗尽的时候,使用普通递归,另一种是当在线程池commit的时候,判断线程是否耗尽,耗尽的话就直接当前线程执行task
  2. 利用指针和容器实现文本查询 越今朝:应该添加一个过滤功能以解决部分单词无法被查询的问题: eg: "I am a teacher."中的teacher无法被查询,因为在示例代码中teacher.被解释为一个单词从而忽略了teacher本身。
  3. 无锁并发队列 TenThousandOne:_head  和 _tail  替换为原子变量。那里pop的逻辑,val = _data[h] 可以移到循环外面吗
  4. 解决博客回复区被脚本注入的问题 secondtonone1:走到现在我忽然明白一个道理,无论工作也好生活也罢,最重要的是开心,即使一份安稳的工作不能给我带来事业上的积累也要合理的舍弃,所以我还是想去做喜欢的方向。
  5. 处理网络粘包问题 zyouth: //消息的长度小于头部规定的长度,说明数据未收全,则先将部分消息放到接收节点里 if (bytes_transferred < data_len) { memcpy(_recv_msg_node->_data + _recv_msg_node->_cur_len, _data + copy_len, bytes_transferred); _recv_msg_node->_cur_len += bytes_transferred; ::memset(_data, 0, MAX_LENGTH); _socket.async_read_some(boost::asio::buffer(_data, MAX_LENGTH), std::bind(&CSession::HandleRead, this, std::placeholders::_1, std::placeholders::_2, shared_self)); //头部处理完成 _b_head_parse = true; return; } 把_b_head_parse = true;放在_socket.async_read_some前面是不是更好

B站

个人微信

个人公众号