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

时间:2013-08-29 18:28:29

标签: javascript heroku

我正在Heroku上运行几个免费的单dyno应用程序,这些应用程序在空闲一段时间后会“睡眠”。我有一个总是清醒的主站点,链接/利用这些有时会进入睡眠状态的其他应用程序。当我从主站点链接到正在睡眠的应用程序时,其他应用程序醒来时会有很长的加载等待。

我想要做的是在用户登陆主页时唤醒所有可能正在睡眠的应用程序,有点像预加载它们,因此当用户需要时可以快速响应。

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

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

3 个答案:

答案 0 :(得分:7)

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

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


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

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

$ heroku addons:add newrelic:standard

打开New Relic界面:

$ heroku addons:open newrelic

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

添加您的网址,将ping时间设置为< 1小时,你就可以了。

使用计划程序

或者,如果您不喜欢或想要使用New Relic,您实际上可以使用Heroku Scheduler通过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

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

$ rake dyno_ping

(c)Aupajo

的原始博客文章

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

然后将其添加为cronjob