我正在Heroku上运行几个免费的单dyno应用程序,这些应用程序在空闲一段时间后会“睡眠”。我有一个总是清醒的主站点,链接/利用这些有时会进入睡眠状态的其他应用程序。当我从主站点链接到正在睡眠的应用程序时,其他应用程序醒来时会有很长的加载等待。
我想要做的是在用户登陆主页时唤醒所有可能正在睡眠的应用程序,有点像预加载它们,因此当用户需要时可以快速响应。
我目前在后台使用简单的$.get(...)
,但当然控制台会抛出'Access-Control-Allow-Origin'错误。我不需要任何数据或任何东西,只需要某种响应来指示应用程序已启动并正在运行。任何人都知道如何通过AJAX调用来做到这一点而没有错误?
(或者,如果有任何其他方式,例如通过API或其他方式)
答案 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