2

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

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

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

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

4

3 回答 3

8

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

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


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

您可以使用以下方法将 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的原始博客文章

于 2013-08-29T18:46:07.523 回答
1

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

于 2013-08-29T19:31:12.833 回答
0

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

然后将其添加为 cronjob

于 2020-07-07T16:19:05.273 回答