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

{
  "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

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