如何使用来自 JS 的 ping 唤醒 Heroku 应用程序?

Posted

技术标签:

【中文标题】如何使用来自 JS 的 ping 唤醒 Heroku 应用程序?【英文标题】:How can I wake a Heroku app with a ping from JS? 【发布时间】:2013-09-02 07:55:28 【问题描述】:

我在 Heroku 上运行了几个免费的单测功机应用程序,这些应用程序在空闲一段时间后会进入“睡眠”状态。我有一个始终处于唤醒状态的主站点,并链接/利用这些有时会进入睡眠状态的其他应用程序。当我从主站点链接到睡眠应用程序时,在另一个应用程序唤醒时,加载等待时间很长。

我想做的是在用户登陆主页的那一刻唤醒所有可能处于休眠状态的应用,有点像预加载它们,以便在用户需要时快速响应。

我目前在后台使用简单的$.get(...),但控制台当然会抛出“Access-Control-Allow-Origin”错误。我不需要任何数据或任何东西,只需要某种响应以表明应用程序已启动并正在运行。任何人都知道我如何通过 AJAX 调用做到这一点而不会出错?

(或者如果有任何其他方式,例如通过 API 或其他方式)

【问题讨论】:

你看到了吗:***.com/questions/5480337/…? 【参考方案1】:

只要curl -I <name of project>.herokuapp.com/<some file like index.html or sometext.txt>

然后将其添加为 cronjob

【讨论】:

您好,欢迎来到 SO。您的回答没有考虑仅在有流量时才使测功机保持活动的最初意图。请查看我们的 good answers 指南。【参考方案2】:

错误是因为 heroku 在不同的域上,对吧?如果是这样,一种选择是从您的服务器向 Heroku 发送请求。更好的是通过 cron 设置一个自动化任务来定期轮询服务器。我推荐 curl,因为它已经安装在大多数 linux 主机中。这与 Edward 推荐的方法相同,但不需要使用外部系统。

【讨论】:

【参考方案3】:

这里是可能的解决方案:https://coderwall.com/p/u0x3nw

由于此处不欢迎仅包含链接的答案,因此我将复制链接内容。


解决 Heroku 空闲策略的一种常见方法是设置一个脚本,每小时发送一次 ping 以保持测功机处于活动状态。

您可以使用以下方法将 New Relic 的免费计划添加到您的帐户。

$ heroku addons:add newrelic:standard

打开New Relic界面:

$ heroku addons:open newrelic

在菜单下的报告部分中,找到可用性。

添加您的网址,将 ping 时间设置为

使用调度器

或者,如果您不喜欢或不想使用 New Relic,您实际上可以使用 Heroku 调度程序通过 Heroku 本身设置一个保持活动状态的 dyno ping。

例如,如果您使用 Ruby,则可以使用 Rake 任务,例如:

desc "Pings PING_URL to keep a dyno alive"
task :dyno_ping do
  require "net/http"

  if ENV['PING_URL']
    uri = URI(ENV['PING_URL'])
    Net::HTTP.get_response(uri)
  end
end

将 PING_URL 添加到您的 Heroku 环境中:

$ heroku config:add PING_URL=http://my-app.herokuapp.com

设置调度器:

$ heroku addons:add scheduler:standard
$ heroku addons:open scheduler

最后一个命令应该会在您的浏览器中打开调度程序界面。您现在可以将 dyno_ping 任务设置为每小时运行一次:

$ rake dyno_ping

(c) Aupajo的原创博文

【讨论】:

以上是关于如何使用来自 JS 的 ping 唤醒 Heroku 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将电脑从睡眠模式唤醒?

如何将TCP数据包发送到iPhone而不是ICMP数据包

如何在js或节点js中ping ip [重复]

从睡眠中唤醒主线程

来自 Java 的 UnknownHostException 但主机使用 Ping/nslookup/curl 解析

一步步玩pcDuino3--uboot下的ping,加入命令能够接受来自host的ping