【发布时间】:2017-05-31 06:57:48
【问题描述】:
我有一个托管在 Heroku 上的 NodeJS 应用程序。有没有办法让我每小时自动运行一次“heroku restart”命令?
我找到了这个答案,但它看起来像是用于 Rails 项目:Restart my heroku application automatically
【问题讨论】:
我有一个托管在 Heroku 上的 NodeJS 应用程序。有没有办法让我每小时自动运行一次“heroku restart”命令?
我找到了这个答案,但它看起来像是用于 Rails 项目:Restart my heroku application automatically
【问题讨论】:
是的,使用Heroku SDK for Node.js。
类似:
heroku.apps('my-app').dynos().restartAll()
应该做的伎俩。所有测功机文档都可以在这里找到:https://github.com/heroku/node-heroku-client/blob/master/docs/dyno.md。您可以使用 Heroku 调度程序运行调度脚本。
但我必须警告你,这肯定不是你想要做的任何事情的最佳方式。如果您对您的问题提供更深入的了解,我相信我们可以提出比一直重启您的测功机更合适的建议。
【讨论】:
使用Heroku v3 API 可以使用request node module
var token = 'youAPIKeyHere';
var appName = 'yourAppName here';
var dynoName = 'yourDynoHere';
var request = require('request');
request.delete(
{
url: 'https://api.heroku.com/apps/' + appName + '/dynos/',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/vnd.heroku+json; version=3',
'Authorization': 'Bearer ' + token
}
},
function(error, response, body) {
// Do stuff
}
);
还有一个node wrapper 提供了类似的体验,但记录不充分,无论如何都需要了解v3 API
var token = 'youAPIKeyHere';
var appName = 'yourAppName here';
var dynoName = 'yourDynoHere';
var Heroku = require('heroku-client');
var heroku = new Heroku({ token: token });
heroku .delete('/apps/' + appName + '/dynos/' + dynoName)
.then( x => console.log(x) );
我还发现用这段代码在浏览器中试验很有用
var token = 'youAPIKeyHere';
var appName = 'yourAppName here';
var dynoName = 'yourDynoHere';
var xhr = new XMLHttpRequest();
xhr.open(
'DELETE',
'https://api.heroku.com/apps/' + appName + '/dynos/' + dynoName
);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Accept', 'application/vnd.heroku+json; version=3');
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.onload = function() {
console.log(xhr.response);
};
xhr.send();
我个人确实发现使用删除方法有点令人担忧。使用delete 方法时应谨慎,单独使用/apps/$$appName$$ 端点将删除应用程序。这是个人经验
以上任何一种,如果省略dyno名称,会重启app下的所有dyno
The other question 引用了不再支持的存储库
【讨论】: