在Heroku的免费应用程序中,dyno似乎一直在空转——我的应用程序流量很低,但在我的情况下,我的用户不得不等待20多秒才能启动一个新的dyno,这也是不能接受的。

坦率地说,在这样的等待下,许多人甚至在第一页显示之前就离开了。

所以,我遇到了一个问题:当我每天的流量都在个位数时,我是否应该每月支付36美元来为每个用户节省令人尴尬的漫长20秒?

有没有办法解决这个问题?


当前回答

作为Pingdom的替代方案,我建议尝试Uptimerobot。它是免费的,并提供5分钟间隔的现场检查。这对我来说很好。

2015年5月7日更新:这将是不可能的,因为Heroku将改变他们的免费动态,以防止保持完整的24小时。

另一个重要的变化与动态睡眠或“空转”有关。虽然非付费应用总是在活动超时后休眠,但一些应用使用自动ping服务来防止这种行为。免费的dynos允许在24小时内保持18小时的清醒状态,在接下来的几周内,我们将开始通知用户超过这一限制的应用程序。随着爱好dyno的引入(每月7美元),我们要求你的应用在超时后休眠,或者升级到这个新选项。

什么时候能直播?根据他们的博客文章:

运行单个1X动态的应用程序不会累积任何其他动态 动态电荷将逐渐迁移到新的自由动态电荷 7月1日开始。

其他回答

使用Node.js 0.10在我自己的Heroku应用上进行了测试和工作。X在2013年6月28日

var http = require('http'); //importing http

function startKeepAlive() {
    setInterval(function() {
        var options = {
            host: 'your_app_name.herokuapp.com',
            port: 80,
            path: '/'
        };
        http.get(options, function(res) {
            res.on('data', function(chunk) {
                try {
                    // optional logging... disable after it's working
                    console.log("HEROKU RESPONSE: " + chunk);
                } catch (err) {
                    console.log(err.message);
                }
            });
        }).on('error', function(err) {
            console.log("Error: " + err.message);
        });
    }, 20 * 60 * 1000); // load every 20 minutes
}

startKeepAlive();

这就是我的解。

使用谷歌应用程序脚本,设置时间触发器。

// main.js
function ping() {
  UrlFetchApp.fetch("https://<Your app>.herokuapp.com/ping_from_GAS");
}

这很简单!

伙计,这是一个你可以运行的英雄应用程序,让多个英雄应用程序存活下来。只需在config.json中添加你想要ping的url。

https://github.com/jcarras/rise-and-shine

在我看来,使用服务的“免费”层不应该为产品或面向客户的应用程序提供动力。虽然上面的解决方案可以防止Dyno空转,但请仔细考虑您正在做的事情。

如果没有其他方法,可以使用cron作业来ping你的站点,并在已知的低使用率时期(例如,夜间)禁用检查,以确保Heroku不会为其他所有人取消免费层。

你可以安装免费的New Relic插件。它有一个可用性监控功能,每分钟会ping你的站点两次,从而防止dyno空转。

或多或少与Jesse的解决方案相同,但可能与Heroku更融合…而且还有一些额外的功能(性能监控非常棒)。

注意:对于所有那些说它不起作用的人:我的答案中重要的部分是“可用性监视器”。仅仅安装插件是没有用的。您还需要使用heroku应用程序的URL设置可用性监视。