You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js编写Heroku高级调度任务?附Ruby示例

Node.js实现Heroku Dyno保活任务

对应你提供的Ruby保活任务,下面是Node.js的实现方案:

Ruby原示例参考

desc "Pings PING_URL to keep a dyno alive"
task :dyno_ping do
  require "net/http"
  if ENV['PING_URL']
    uri = URI(ENV['PING_URL'])
    Net::HTTP.get_response(uri)
  end
end

方法一:使用Node.js原生http模块

无需额外安装依赖,直接用内置模块编写脚本(示例命名为dyno-ping.js):

const http = require('http');
const https = require('https');

const pingUrl = process.env.PING_URL;

if (!pingUrl) {
  console.log('PING_URL环境变量未设置,跳过保活请求');
  process.exit(0);
}

// 根据URL协议选择对应模块
const client = pingUrl.startsWith('https') ? https : http;

client.get(pingUrl, (res) => {
  console.log(`保活请求发送成功,状态码:${res.statusCode}`);
  res.resume(); // 消耗响应流,避免内存泄漏
  process.exit(0);
}).on('error', (err) => {
  console.error('保活请求失败:', err.message);
  process.exit(1);
});

方法二:使用node-fetch(语法更简洁)

如果偏好现代异步语法,可使用node-fetch库:

  1. 先安装依赖:
npm install node-fetch --save
  1. 编写脚本(示例命名为dyno-ping-fetch.js):
const fetch = require('node-fetch');

const pingUrl = process.env.PING_URL;

async function pingDyno() {
  if (!pingUrl) {
    console.log('PING_URL环境变量未设置,跳过保活请求');
    return;
  }

  try {
    const response = await fetch(pingUrl);
    console.log(`保活请求发送成功,状态码:${response.status}`);
  } catch (err) {
    console.error('保活请求失败:', err.message);
  }
}

pingDyno();

Heroku高级调度配置

  1. 进入Heroku控制台的「高级调度(Advanced Scheduler)」,添加新任务
  2. 任务命令填写:node dyno-ping.js(根据你的脚本实际路径调整)
  3. 设置调度频率(建议每10分钟一次,避免dyno休眠)
  4. 在Heroku「设置」→「配置变量」中添加PING_URL,值为你的应用访问地址(比如Heroku分配的域名)

内容的提问来源于stack exchange,提问作者learncode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:48:19