leancloud国内版无域名解决valine-admin云引擎唤醒失败

为自己的博客评论系统增加邮件提醒功能,找到了valine的提醒邮件方案:
由于valine自带的邮件提醒功能将在v1.4.0后就没有了,更改为第三方邮件提醒:

问题1: Leancloud没有作者说明中所提到的部署方式。可能界面改版了。现有方式具体如下:

  1. 点击部署-部署项目

  1. 点击git部署-配置git即可

问题2:LeanCloud 休眠策略解决,作者给出的是定时任务

LeanCloud 自带定时器

问题在于需要一个能够访问的 Web 主机的域名

新版定时器虽然不需要Web 主机的域名,但又发现了无法唤醒的问题:

因流控原因,通过定时任务唤醒体验版实例失败,建议升级至标准版云引擎实例避免休眠

而有自己Web 主机的域名的可以通过外部程序访问Web 主机的域名激活唤醒一次,之后邮件提醒的云引擎新版定时器可以自己唤醒。

目前的事实是,想要获取 Web 主机的域名需要有备案信息,LeanCloud 开发版没有备案权限,(选择国际版没有这个问题)。所以从外部访问自己的邮件提醒云引擎不可能。

难就难在访问这个内部云引擎(没有Web 主机的域名)。

解决方案如下:

当博客有新的评论产生时,邮件提醒程序会被唤醒,但第一次唤醒的邮件并不会发送。

如valine一样,利用LeanCloud 的js SDK 接口访问我们的存储,然后自动新增一条评论记录,然后再删除它,valine-admin就会被唤醒。

LeanCloud 文档:https://leancloud.cn/docs/leanstorage_guide-js.html#hash765832

开发源码:

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"name": "auto",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"leancloud-storage": "^4.7.0"
}
}

index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const AV = require('leancloud-storage')
async function init(){
try {
AV.init({
appId: '自己的appId',
appKey: '自己的appKey',
serverURLs: 'https://avoscloud.com',
});
} catch (ex) { console.log(ex)}
let acl = new AV.ACL();
acl.setPublicReadAccess(true);
acl.setPublicWriteAccess(true);
const ne = AV.Object.extend('Comment');
let comment = new ne();
comment.set('comment', "<p>唤醒~</p>");
comment.set('url', "/about/");
comment.setACL(acl);
comment.save().then(ret => {
let id=ret.id;
console.log(id)
sleep(5000);
const todo = AV.Object.createWithoutData('Comment', id);
todo.setACL(acl);
todo.destroy();
});
function sleep(numberMillis) {
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true) {
now = new Date();
if (now.getTime() > exitTime)
return;
}
}
}
init();

唤醒方式,如上程序可以部署到自己的vps中,或者支持定时任务的第三方中。

也可参考另外的人的解决思路,不过还是需要一个对外的域名:

  1. 使用github action解决流控问题

  2. 解决valine-admin云引擎唤醒失败

end