在Heroku的免费应用程序中,dyno似乎一直在空转——我的应用程序流量很低,但在我的情况下,我的用户不得不等待20多秒才能启动一个新的dyno,这也是不能接受的。

坦率地说,在这样的等待下,许多人甚至在第一页显示之前就离开了。

所以,我遇到了一个问题:当我每天的流量都在个位数时,我是否应该每月支付36美元来为每个用户节省令人尴尬的漫长20秒?

有没有办法解决这个问题?


当前回答

我发现另一个免费的网站,将不断ping你的网站叫Unidler

http://unidler.herokuapp.com/

和pingdom一样,但是不需要登录。

其他回答

它在Heroku文档中说,拥有超过1个web dyno将永远不会闲置。可能有一个比皮埃尔建议的每小时0.09美元更便宜的解决方案。

文档

答案很简单——如果你看重服务,那就付钱。

所有这些获得付费服务的“技巧”……这就像偷有线电视一样。甚至在这里列出它们都是值得怀疑的。接下来是什么,盗版游戏的技巧吗?

就像这里的另一个帖子一样,我很重视开发和测试的免费服务,如果Heroku因为有太多的白吃白喝的人而取消它,我会对你们这些道德受损的人感到非常恼火。我只是觉得他的批评不够直接。

如果你正在使用带有express的nodejs,你可以添加一个每10分钟调用一次自己的端点。

路由器:

app.get("/keep-alive",require("path/to/keepAlive.js").keepAlive);

keepAlive.js

let interval;

function keepAlive(req, res) {
   if(interval) return res.end();
   
   interval = setInterval(() => {
      fetch("http://your-heroku-subdomain/keep-alive")
         .catch(err => {/*handle error here*/});
      }
   ,60_000);


   return res.end();
}

module.exports = { keepAlive }

在我看来,使用服务的“免费”层不应该为产品或面向客户的应用程序提供动力。虽然上面的解决方案可以防止Dyno空转,但请仔细考虑您正在做的事情。

如果没有其他方法,可以使用cron作业来ping你的站点,并在已知的低使用率时期(例如,夜间)禁用检查,以确保Heroku不会为其他所有人取消免费层。

在一个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();
}
}