解决valine-admin云引擎唤醒失败
leancloud国内版无域名解决valine-admin云引擎唤醒失败
为自己的博客评论系统增加邮件提醒功能,找到了valine的提醒邮件方案:
由于valine自带的邮件提醒功能将在v1.4.0后就没有了,更改为第三方邮件提醒:
- Valine-Admin (by @zhaojun1998)
问题1: Leancloud没有作者说明中所提到的部署方式。可能界面改版了。现有方式具体如下:
- 点击部署-部署项目
- 点击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中,或者支持定时任务的第三方中。
也可参考另外的人的解决思路,不过还是需要一个对外的域名:
end
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 零的博客!