如何通过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
相关产品推荐
相关产品推荐

