在Heroku的免费应用程序中,动态资源似乎会保持空闲状态 - 我的应用程序流量非常低,但是对于我的用户需要等待20多秒才能启动新的动态资源来说,这也不是真正可接受的情况。
坦白地说,在那种等待时间下,许多人甚至会在第一页显示之前就离开。
所以,我有一个问题:当我的流量每天只有个位数时,我是否应该支付36美元/月来节省每个用户尴尬的长达20秒的等待时间呢?
有没有办法解决这个问题?
在Heroku的免费应用程序中,动态资源似乎会保持空闲状态 - 我的应用程序流量非常低,但是对于我的用户需要等待20多秒才能启动新的动态资源来说,这也不是真正可接受的情况。
坦白地说,在那种等待时间下,许多人甚至会在第一页显示之前就离开。
所以,我有一个问题:当我的流量每天只有个位数时,我是否应该支付36美元/月来节省每个用户尴尬的长达20秒的等待时间呢?
有没有办法解决这个问题?
注意:对于所有声称它无法工作的人,请注意我回答中的重要部分是“可用性监视”。仅安装插件是没有用的。 您还需要使用您的heroku应用程序的URL设置可用性监视。
你也可以尝试http://kaffeine.herokuapp.com(由我开发),它旨在防止Heroku应用进入睡眠状态。它将每10分钟PING您的应用程序,以使其不会进入睡眠状态。 完全免费。
作为Pingdom的替代方案,我建议尝试Uptimerobot。它是免费的,并提供5分钟间隔的站点检查。对我来说它运行得非常好。
更新于2015年5月7日:这将不再可能,因为Heroku将更改其免费dyno以防止其完全运行24小时:
另一个重要变化涉及dyno睡眠或“空闲”。虽然非付费应用程序在活动超时后总是会进入睡眠状态,但一些应用程序使用自动ping服务来防止该行为。免费dynos每24小时允许保持18小时清醒,并且在接下来的几周中,我们将开始通知超过此限制的应用程序用户。随着爱好dyno(每月7美元)的推出,我们要求您让您的应用程序在超时后休眠,或升级到这个新选项。
这将何时生效?根据他们的博客文章:
单个1X dyno运行的应用程序如果没有累积任何其他 dyno费用,将逐渐迁移到新的免费dynos 开始于7月1日。
我认为,在生产或面向客户的应用中,不应该使用服务的“免费”层。虽然上述解决方案可以防止Dyno停机,但要深思熟虑你正在做什么。
如果没有其他选择,请使用cron job定时访问您的网站,并在已知低使用期间(即过夜)禁用Heroku的检查,以确保不会影响其他用户的免费层。
简单的答案——如果你重视这项服务,那就付费使用。
所有这些“诀窍”来获得付费服务的好处……那基本上就像是窃取有线电视一样。甚至在这里列出它们都有问题。接下来,是关于如何盗版游戏的技巧吗?
和另一个帖子的作者一样,我很重视用于开发和测试的免费服务,如果Heroku因为有太多的免费乘客而取消了这项服务,我会非常恼火,而且我认为他的批评不够直接。
在2013年6月28日,我使用Node.js 0.10.x测试并成功运行在我的Heroku应用上
var http = require('http'); //importing http
function startKeepAlive() {
setInterval(function() {
var options = {
host: 'your_app_name.herokuapp.com',
port: 80,
path: '/'
};
http.get(options, function(res) {
res.on('data', function(chunk) {
try {
// optional logging... disable after it's working
console.log("HEROKU RESPONSE: " + chunk);
} catch (err) {
console.log(err.message);
}
});
}).on('error', function(err) {
console.log("Error: " + err.message);
});
}, 20 * 60 * 1000); // load every 20 minutes
}
startKeepAlive();
我使用由Heroku提供的免费Heroku Scheduler插件。一旦添加,只需使用“curl http://yourapp.herokuapp.com”创建一个10分钟的任务即可。
在Heroku的文档中表示,拥有超过1个Web dyno将永远不会处于空闲状态。这可能是比Pierre建议的每小时$0.09更便宜的解决方案。