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

如何通过node-heroku-client执行heroku run命令?

问题解答

核心结论

  • Heroku REST API存在对应heroku run功能的端点,本质是创建一次性临时dyno来执行指定命令,而非在现有运行中的dyno上操作。
  • node-heroku-client是Heroku官方REST API的封装库,支持调用该端点,但没有专门封装heroku run的快捷方法,需要手动调用API。

正确的API调用方式

你不需要遍历现有dyno,直接请求创建新的一次性dyno即可运行命令。正确的端点是POST /apps/{app_name}/dynos,请求体中指定command等参数即可。

修正后的代码示例

const Heroku = require('heroku-client');
const heroku = new Heroku({ token: 'xxx' });

const app_name = 'app_name';
// 替换为你需要执行的数据库操作命令,比如:
const command = 'npx sequelize-cli db:drop && npx sequelize-cli db:create && npx sequelize-cli db:migrate';

heroku.post(`/apps/${app_name}/dynos`, {
  headers: { 'Accept': 'application/vnd.heroku+json; version=3' },
  body: {
    command: command,
    attach: false, // 不需要交互式终端时设为false
    size: 'hobby' // 可选,指定dyno规格,默认是免费的hobby规格
  }
})
.then(response => {
  console.log('临时dyno创建成功,命令已开始执行:', response);
  // 可通过dyno的id后续查询执行状态
})
.catch(error => {
  console.error('执行失败:', error);
});

关键说明

  • 该接口创建的是临时dyno,命令执行完毕后会自动停止,不会影响现有运行中的dyno。
  • 数据库操作命令需要确保应用代码已包含对应工具(如sequelize-cli、prisma等),且环境变量(如DATABASE_URL)配置正确。
  • 若需要获取命令执行输出,可将attach设为true,但需处理WebSocket连接接收输出(逻辑相对复杂,无需实时输出时设为false即可,命令会后台执行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:37:06