繁体   English   中英

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

[英]How can I wake a Heroku app with a ping from JS?

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

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

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

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

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

由于这里不欢迎仅包含链接的答案,我将只复制链接内容。


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

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

$ heroku addons:add newrelic:standard

打开New Relic界面:

$ heroku addons:open newrelic

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

添加您的 URL,将 ping 时间设置为 < 1 小时,您就可以开始了。

使用调度程序

或者,如果您不喜欢或不想使用 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 的原始博客文章

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

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

然后将其添加为 cronjob

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM