【问题标题】:Heroku Scheduler is not running asynchronous actions on deployed appHeroku Scheduler 未在已部署的应用程序上运行异步操作
【发布时间】:2021-05-24 21:55:38
【问题描述】:

我正在尝试使用 Heroku Scheduler 设置服务,以在我的 worker.js 文件中运行一个函数,以每小时从我的数据库中删除旧数据。当我使用“heroku run worker”部署它后在命令行上对其进行测试时,我只记录了“STARTED”。所以这个函数被执行了,但是一旦它到达等待它就会挂起并最终结束。在本地执行该功能时,它工作正常。

这是我的 worker.js:

const db = require("./db");

const deleteOldData = async () => {
    let twoDaysAgoUTC = new Date(Date.now() - 2 * 24 * 60 * 60 * 1000);
    twoDaysAgoUTC.toUTCString();
    console.log("STARTED") <- only this line gets logged
    await db.query(
        `DELETE FROM chat_messages WHERE timestamp < $1`,[twoDaysAgoUTC]
    );

    await db.query(
        `DELETE FROM guests
        WHERE group_chat_id IN (
            SELECT group_chat_id FROM group_chats
            WHERE timestamp < $1
        )`,[twoDaysAgoUTC]
    );

    await db.query(
        `DELETE FROM group_chats WHERE timestamp < $1`,[twoDaysAgoUTC]
    );

    console.log("FINISHED")
}

deleteOldData();
process.exit();

【问题讨论】:

    标签: node.js heroku psql


    【解决方案1】:

    您在代码中存在关于同步和异步代码的基本问题。 当您调用 deleteOldData() 时,它将异步运行并且不会等到它完成执行,而是会向下并执行 process.exit() ,这将在未完成任务的情况下终止进程。

    解决方法是在deleteOldData函数结束时调用exit命令。

    const db = require("./db");
    
    const deleteOldData = async () => {
        let twoDaysAgoUTC = new Date(Date.now() - 2 * 24 * 60 * 60 * 1000);
        twoDaysAgoUTC.toUTCString();
        console.log("STARTED") <- only this line gets logged
        await db.query(
            `DELETE FROM chat_messages WHERE timestamp < $1`,[twoDaysAgoUTC]
        );
    
        await db.query(
            `DELETE FROM guests
            WHERE group_chat_id IN (
                SELECT group_chat_id FROM group_chats
                WHERE timestamp < $1
            )`,[twoDaysAgoUTC]
        );
    
        await db.query(
            `DELETE FROM group_chats WHERE timestamp < $1`,[twoDaysAgoUTC]
        );
    
        console.log("FINISHED");
        process.exit();
    }
    
    deleteOldData();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-01
      • 2016-11-29
      • 1970-01-01
      • 2022-07-15
      • 2017-04-22
      • 2016-09-22
      • 2018-01-18
      • 1970-01-01
      相关资源
      最近更新 更多