【问题标题】:Restart heroku dyno in nodejs在nodejs中重新启动heroku dyno
【发布时间】:2014-10-26 10:44:07
【问题描述】:

我想重新启动一个 nodejs 应用程序来更改它的 ip。我将如何在应用程序本身内执行此操作?我尝试过强制崩溃,但是如果应用程序在十分钟内崩溃两次,那么 heroku 将在第一次崩溃十分钟后重新启动测功机。

【问题讨论】:

    标签: node.js heroku


    【解决方案1】:

    使用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

    【讨论】:

      【解决方案2】:

      您可以直接从 heroku 的 Web 仪表板重新启动 nodejs dynos:

      仪表板 -> 更多 -> 重新启动所有测功机

      【讨论】:

        【解决方案3】:

        查看 v3 API 的 this 节点包装器和 this api 命令。

        如果真的需要在应用程序内部完成,您可能需要创建某种条件来触发它。

        【讨论】:

        【解决方案4】:

        如果您安装了 Heroku CLI,您可以在应用程序的文件夹中运行 heroku restart 或运行 heroku restart --app application_name

        如果你没有安装它,你可以找到它的相关信息here

        【讨论】:

        • 这似乎没有回答“我将如何在应用程序本身中执行此操作?”的问题
        • 这并没有回答问题,而是询问如何以编程方式进行
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-25
        • 2020-12-31
        • 2021-04-19
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        相关资源
        最近更新 更多