在Heroku的免费应用程序中,dyno似乎一直在空转——我的应用程序流量很低,但在我的情况下,我的用户不得不等待20多秒才能启动一个新的dyno,这也是不能接受的。
坦率地说,在这样的等待下,许多人甚至在第一页显示之前就离开了。
所以,我遇到了一个问题:当我每天的流量都在个位数时,我是否应该每月支付36美元来为每个用户节省令人尴尬的漫长20秒?
有没有办法解决这个问题?
在Heroku的免费应用程序中,dyno似乎一直在空转——我的应用程序流量很低,但在我的情况下,我的用户不得不等待20多秒才能启动一个新的dyno,这也是不能接受的。
坦率地说,在这样的等待下,许多人甚至在第一页显示之前就离开了。
所以,我遇到了一个问题:当我每天的流量都在个位数时,我是否应该每月支付36美元来为每个用户节省令人尴尬的漫长20秒?
有没有办法解决这个问题?
当前回答
我发现另一个免费的网站,将不断ping你的网站叫Unidler
http://unidler.herokuapp.com/
和pingdom一样,但是不需要登录。
其他回答
我使用的Heroku调度插件由Heroku免费提供。一旦添加,它就像创建一个带有“curl http://yourapp.herokuapp.com”和10分钟间隔的作业一样简单。
我已经写下了步骤:
➜将gem 'newrelic_rpm'添加到您的Gemfile下的staging & production ➜bundle install ➜登录到heroku控制面板并添加newrelic插件 ➜一旦添加,设置自动ping到你的网站,这样它就不会闲置 ➜浏览菜单>可用性监控(在设置下) →点击“开启可用性监控” ➜输入要ping的url(例如:http://spokenvote.org) ➜选择1分钟为间隔
还有一个有效的解决方案:wokeDyno 以下是一篇博客文章是如何工作的: 它很容易集成到应用程序中:
/* Example: as used with an Express app */
const express = require("express")
const wakeDyno = require("woke-dyno");
// create an Express app
const app = express();
// start the server, then call wokeDyno(url).start()
app.listen(PORT, () => {
wakeDyno(DYNO_URL).start(); // DYNO_URL should be the url of your Heroku app
});
作为Pingdom的替代方案,我建议尝试Uptimerobot。它是免费的,并提供5分钟间隔的现场检查。这对我来说很好。
2015年5月7日更新:这将是不可能的,因为Heroku将改变他们的免费动态,以防止保持完整的24小时。
另一个重要的变化与动态睡眠或“空转”有关。虽然非付费应用总是在活动超时后休眠,但一些应用使用自动ping服务来防止这种行为。免费的dynos允许在24小时内保持18小时的清醒状态,在接下来的几周内,我们将开始通知用户超过这一限制的应用程序。随着爱好dyno的引入(每月7美元),我们要求你的应用在超时后休眠,或者升级到这个新选项。
什么时候能直播?根据他们的博客文章:
运行单个1X动态的应用程序不会累积任何其他动态 动态电荷将逐渐迁移到新的自由动态电荷 7月1日开始。
在一个spring应用程序中,每2分钟向根url路径发出一个HTTP请求 `
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.client.RestTemplate;
public class HerokuNotIdle {
private static final Logger LOG = LoggerFactory.getLogger(HerokuNotIdle.class);
@Scheduled(fixedDelay=120000)
public void herokuNotIdle(){
LOG.debug("Heroku not idle execution");
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("http://yourapp.herokuapp.com/", Object.class);
}
}
记住,配置上下文以启用调度器并为调度器创建bean
@EnableScheduling
public class AppConfig {
@Bean
public HerokuNotIdle herokuNotIdle(){
return new HerokuNotIdle();
}
}