2013-08-29 35 views
2

我在Heroku上运行几个免费的单一测试应用程序,在空闲一段时间后进入“睡眠”状态。我有一个总是醒着的主站点,并链接/利用这些其他有时候睡觉的应用程序。当我链接到主站点的睡眠应用程序时,有很长的加载等待,而另一个应用程序醒来。如何从JS中唤醒Heroku应用程序?

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

我目前在后台使用一个简单的$.get(...),但当然控制台会抛出'Access-Control-Allow-Origin'错误。我不需要任何数据或任何东西,只是某种反应,表明应用程序已启动并正在运行。任何人都知道我可以如何在没有错误的情况下通过AJAX调用完成此操

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

+0

你见过这个:http://stackoverflow.com/questions/5480337/easy-way-to-prevent-heroku-idling? –

回答

7

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

仅含有一个链接这里不欢迎的答案,我只是复制链接内容。


解决Heroku的空转政策的常用方法是建立一个脚本来一次发送ping一小时,以保持到了极致活着。

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

$ heroku addons:add newrelic:standard 

打开New Relic的接口:

$ heroku addons:open newrelic 

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

添加您的网址,设置一个小时的ping时间为<,并且您都准备好了。

使用调度

另外,如果你不喜欢或希望使用New Relic的,你其实可以通过设立的Heroku自身保持活动的DYNO平,使用Heroku的调度。

举例来说,如果你使用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 

(三)原博客文章由Aupajo

1

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

相关问题