【问题标题】:Automatically restarting Heroku NodeJS app自动重启 Heroku NodeJS 应用
【发布时间】:2017-05-31 06:57:48
【问题描述】:

我有一个托管在 Heroku 上的 NodeJS 应用程序。有没有办法让我每小时自动运行一次“heroku restart”命令?

我找到了这个答案,但它看起来像是用于 Rails 项目:Restart my heroku application automatically

【问题讨论】:

    标签: node.js heroku


    【解决方案1】:

    是的,使用Heroku SDK for Node.js。

    类似:

    heroku.apps('my-app').dynos().restartAll()
    

    应该做的伎俩。所有测功机文档都可以在这里找到:https://github.com/heroku/node-heroku-client/blob/master/docs/dyno.md。您可以使用 Heroku 调度程序运行调度脚本。

    但我必须警告你,这肯定不是你想要做的任何事情的最佳方式。如果您对您的问题提供更深入的了解,我相信我们可以提出比一直重启您的测功机更合适的建议。

    【讨论】:

    • 非常感谢,安德鲁 - 这对我有用。这只是一个临时解决方案,直到我们弄清楚出了什么问题。设法弄明白了!
    【解决方案2】:

    使用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 引用了不再支持的存储库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-17
      • 2014-10-26
      • 2018-10-13
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2015-10-10
      • 2013-10-16
      相关资源
      最近更新 更多