avatar

目录
用终端自动化部署hexo,编程解决豆瓣插件bug

遇到的问题:

1:更新hexo时指令太多

自从使用了hexo搭建博客,每次更新网站都需要hexo clean hexo g hexo d 三连,着实麻烦,如果能够连续执行这几个指令就好了,在网上一查正好找到了解决方案。

2:hexo—douban插件小bug

在新版本中似乎已经解决

该插件生成的页面在iOS、macOS平台的浏览器中被“防盗链”了,导致无法显示书籍、电影的封面。

在issues里面有人建议在生成的index.html文件中head部分增加<meta name="referrer" content="no-referrer"> 这一行代码,实测有效。

但总不能每次生成后都一个个打开文件去添加吧,太麻烦了,今天突然想到可以直接用c++读写文件的操作来实现自动添加。

解决

hexo

在mac下创建一个.sh 文件(win平台有类似的其他文件),在这个文件中,一行一行地添加你想要顺序执行的语句,如下:

shell
1
2
3
cd /Users/root/blog  # 进入hexo本地目录
hexo clean
hexo g -d

保存,关闭,使用chmod指令给这个文件增加“可执行”权限后即可。

大功告成。

在你想要更新网站时,只需把上面的这个文件拖入终端,按下回车,它会自动执行里面的每一行命令。

douban

学了那么久的c++,平时解决实际问题却用的很少,今天终于派上用场了。

使用fstream读写文件。

代码如下:

c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
using namespace std;

int main()
{
string str;
ifstream fin;
fin.open("/Users/root/blog/public/books/index.html", ios::in);
stringstream buf;
buf << fin.rdbuf();
str = buf.str();//读出该文件内所有内容,存储在str中
fin.close();
str.insert(59,"<meta name=\"referrer\" content=\"no-referrer\">");//在str的对应位置(head部分的开头),插入修复的代码
ofstream fout("/Users/root/blog/public/books/index.html", ios::trunc);
fout << str;//trunc表示覆盖写入原文件
fout.close();
return 0;
}

这一段代码跑完,就会在特定文件的特定位置插入特定字符串,正是我们需要做的。

使用gcc工具生成可执行文件,或者直接使用开发环境已经生成的可执行文件,放在一个合适的位置(比如说放在sh脚本同一个文件夹下面)

注意,豆瓣插件会生成books、movies、games三个页面,所有修改上面的代码,最后得到三个可执行文件,分别是hexo_movieshexo_bookshexo_games

接下来,只需要把sh文件内容修改为:

shell
1
2
3
4
5
6
7
8
9
10
11
cd /Users/root/blog
hexo clean
hexo g
# 进入hexo本地目录,clean、g。hexo g操作中应包含hexo douban操作
# 这时生成的电影书籍游戏页面文件中,是缺少<meta name=\"referrer\" content=\"no-referrer\">这行代码的
cd /Users/root/sh # 进入存放三个可执行文件的文件夹
./hexo_movies
./hexo_games
./hexo_books # 执行这个三个程序
cd /Users/root/blog # 返回hexo目录
hexo deploy # 部署。注意这里不能用hexo d,因为hexo deploy和hexo douban名字冲突了。

大功告成。

以后更新,只需要把这个sh文件拖入终端,按下回车。

打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论