简单的方法来防止Heroku空转?

ssc*_*rus 279 heroku

在Heroku免费应用程序中,dynos似乎保持闲置 - 我的应用程序的流量非常低,但在我的情况下,我的用户还必须等待20多秒才能启动新的dyno.

坦率地说,有了这种等待,很多人会在第一页显示之前离开.

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

有没有解决的办法??

Pie*_*rre 350

您可以安装免费的New Relic插件.它具有可用性监视器功能,可以每分钟对您的站点执行两次ping操作,从而防止dyno空闲.

或多或少与Jesse相同的解决方案,但可能更多地集成到Heroku ......并且有一些额外的好处(性能监控非常棒).

可用性监控

注意:对于那些说不起作用的人:我的答案中的重要部分是"可用性监视器".只是安装插件无济于事.您还需要使用heroku应用程序的URL设置可用性监视.

  • 如果有人仍然在寻找这个,ping的直接链接在这里:https://synthetics.newrelic.com/accounts/ [your_account_id] /monitors/new只需在您的帐户ID中. (12认同)
  • @aubraus:你的编辑被拒绝了......无论如何:对于那些说不起作用的人:我的回答中的重要部分是"可用性监视器".只是安装插件无济于事.您还需要使用heroku应用程序的URL设置可用性监视. (8认同)
  • 我们是否也必须安装gem'newrelic_rpm'以防止dyno空转? (6认同)
  • 我刚刚发现了这个.它__仍然很好地工作.但是,为了以防万一,我确保在显示"可用应用程序"消息之前执行简单的数据库查询.对于Pagoda和其他任何困倦的主人来说,这也很有用. (4认同)
  • 这增加了多少dyno使用量? (3认同)
  • 它让你在100%的时间内使用你的演示(最多744h /月),但是Heroku在一个月内免费给你750h,你不应该注意到. (2认同)
  • 新遗物需要一些设置.死的简单解决方案:http://uptimerobot.com.它将每隔5分钟ping一次网站. (2认同)
  • 我在附件中找不到可用性监控屏幕,但确实通过New Relic Synthetics https://docs.newrelic.com/docs/alerts/alert-policies/downtime-alerts/availability-monitoring找到了它,甚至可能都没有需要插件. (2认同)

Cri*_*ian 89

作为Pingdom的替代品,我建议尝试Uptimerobot.它是免费的,并提供5分钟的间隔现场检查.它对我来说非常好.

更新2015年5月7日:这将不再可能,因为Heroku将改变他们的免费dyno以防止它在24小时内保持活着:

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

这什么时候开始?根据他们的博客文章:

运行单个1X dyno且不累积任何其他dyno费用的应用程序将从7月1日开始逐渐迁移到新的免费dynos .

  • 截至2017年4月,18小时限制消失,只要您的帐户经过验证,您就可以全天24小时免费拨打电话.https://devcenter-staging.heroku.com/articles/free-dyno-hour-faq. (7认同)

dro*_*owe 75

在我看来,使用服务的"免费"层不应该为生产或面向客户的应用程序提供动力.虽然上述解决方案可以对抗Dyno闲置,但请仔细考虑您正在做的事情.

如果不出意外,请使用cron作业ping您的站点,并禁用对已知低使用时段(即隔夜)的检查,以确保Heroku不会为其他所有人取消免费套餐.

  • 主要是针对此解决方案的上述答案的人.Heroku免费套餐的目标不是托管需要为客户提供的生产应用程序.免费层空闲允许Heroku提供此级别用于开发/测试,而不需要经常运行服务器的大量开销. (35认同)
  • 它对于流量较低且没有付费客户的"生产"网站也很好,你不想等待30秒才能加载第一页. (28认同)
  • 你不太了解他的应用程序,所以我认为你的评论是相当评判的. (15认同)
  • 你是对的,但是有很多正当理由只能运行一个dyno ...比如在内存中有一个状态的协调器...... (2认同)

Rom*_*ain 58

您也可以尝试http://kaffeine.herokuapp.com,这是为了防止Heroku应用程序进入睡眠状态.它会每隔10分钟ping您的应用程序,以便您的应用程序不会进入睡眠状态.它是完全免费的.

  • @meteor是的,现在可以在这里:http://kaffeine.herokuapp.com/#decaf (5认同)
  • 它不再接受新的应用程序。它的 GitHub 页面包含几个关于此的问题。这个答案现在可以被认为是过时的。 (3认同)
  • 是否可以从您的服务中删除您的 herokuapp? (2认同)
  • 我的仍然会闲置(有时会超过 30 分钟才能 ping 通,而且 Heroku 闲置时间表也不稳定),所以现在尝试一下新的遗物(上图) (2认同)

Jes*_*ott 45

您可以使用http://pingdom.com/查看您的应用; 如果每分钟左右完成,heroku将不会闲置你的应用程序,也不需要旋转.

  • 很难在两个答案之间做出决定!最后我和Newrelic一起去了,因为那里已经有了一个帐户.非常感谢这个伟大的建议 - 它确实解决了我的问题.:) +1. (2认同)
  • 为什么每分钟都这样做?正如你在@ newe1344的答案中看到的那样,Heroku在一小时不活动后旋转了dyno.那么每59分钟一定会变得更有效率吗? (2认同)
  • 它报告何时停机,因此分钟频率适用于防止睡眠和报告停机时间 (2认同)

elc*_*elc 38

简单的答案 - 如果您重视服务,那么支付它.

所有这些"技巧"都可以获得付费服务的好处......好吧,它基本上就像窃取有线电视一样.甚至可以在这里列出它们.接下来是什么,如何盗版游戏的技巧?

就像这里的另一张海报一样,我非常重视开发和测试的免费服务,如果Heroku不使用它,我将非常恼火于所有道德障碍类型,因为有太多的贪图者.我只是觉得他的批评不够直接.

  • 这是一项带有特定条款的付费服务.为什么不在这些条款中优化您对服务的使用以充分利用它? (13认同)
  • 嗯,我相信我已经说明了原因,但要进一步说明 - 免费托管的预期用途是明确的."永远在线"的优势是即使只为第二名工人支付微薄的费用也是一种好处.这里的所有漏洞都涉及无用的资源,无法为服务付费.这是可耻的行为.我为什么要在乎?因为如果他们厌倦了,他们的办法就是取消免费服务,按照预期使用,这对我来说很有价值. (8认同)
  • 这有点过头了.我们在测试时部署到heroku.当我们的客户在闲置时访问该网站时,他们认为我们开发的用于连接服务的应用程序存在问题.保持网站活着是为了响应演示一个可能永远不会看到光明的应用程序并不是不道德的.听起来像个人信念,而不是道德.如果它不违反规则或法律,那么您的道德推定是唯一错误的*.免费增值是一种合法的商业模式.可以"利用"其中的免费部分.这是预期的. (4认同)
  • 好的只是为了向你澄清驾车经营者,他不仅要问"周围有没有办法?" 他还问"我应该付钱......"这就是我要回答的问题.这是一个更基本的问题.当然,有很多简单的方法可以绕过.他们在道德上是错误的,所以最好浪费时间在这里详细说明,并且可以说是更糟糕的,因为它构成了促成和鼓励不良行为. (2认同)

小智 29

在2013年6月28日使用Node.js 0.10.x测试并使用我自己的Heroku应用程序

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();
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,最好的解决方案,因为它不依赖于任何第三方服务.谢谢 :) (2认同)

Jor*_*dan 19

我使用Heroku提供的Heroku Scheduler插件是免费的.添加后,使用'curl http://yourapp.herokuapp.com ' 创建作业并且间隔10分钟就很简单了.

  • 唯一的缺点是,他们在提供此插件之前要求提供信用卡信息。 (2认同)

Ris*_*shi 14

将您的应用程序的 URL 添加到http://kaffeine.herokuapp.com/

从网站:

Kaffeine 每 30 分钟 ping 您的 Heroku 应用程序,因此它永远不会进入睡眠状态*

Kaffeine 每 30 分钟 ping 您的 Heroku 应用程序,因此它永远不会进入睡眠状态


new*_*rts 10

它在Heroku文档中说,拥有超过1个web dyno永远不会空出来.皮埃尔建议,可能比每小时0.09美元更便宜的解决方案.

在此输入图像描述

文档

  • Heroku插件有免费的标准版本. (6认同)

Pra*_*oya 9

我写下了以下步骤:

➜在暂存和制作下将gem"newrelic_rpm"添加到Gemfile中
➜捆绑安装
➜登录heroku控制面板并添加新的插件
➜添加后,设置自动ping到您的网站,使其不闲置
➜浏览菜单>可用性监控(在设置下)→单击"打开可用性监视"
➜输入要ping的URL(例如:http://spokenvote.org)
➜选择1分钟的间隔

  • 谢谢Pratik.仅供参考,如果您每分钟ping一次应用程序,您将使用带宽而不会对空闲有任何好处.除非你有其他原因,否则可以安全地扩展触摸. (3认同)
  • Heroku只会在1小时不活动后让您的dyno进入睡眠状态,因此您可以将间隔缩放回1小时(或者安全方面可能需要50分钟). (3认同)

ros*_*net 6

一个 cron 工作就可以了。请参阅https://cron-job.org。它免费且可靠。


son*_*002 5

我找到了另一个免费网站,它会不断 ping 您的网站,名为 Unidler

http://unidler.herokuapp.com/

与pingdom相同,但不需要登录。


小智 5

这里的大多数答案都已过时或目前无法使用。当前的个人帐户免费套餐每月提供 550 个免费 dyno 小时的基础

一个经过验证的免费帐户可为您提供 1000 小时的免费 dyno。我写了一篇关于如何让我的免费应用程序保持清醒的文章。

https://link.medium.com/uDHrk5HAD0

希望它可以帮助任何在 2019 年需要解决方案的人