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

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

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

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


当前回答

将应用程序的URL添加到http://kaffeine.herokuapp.com/。

来自网站:

Kaffeine每30分钟ping一次你的Heroku应用,所以它永远不会睡觉*

其他回答

我已经写下了步骤:

➜将gem 'newrelic_rpm'添加到您的Gemfile下的staging & production ➜bundle install ➜登录到heroku控制面板并添加newrelic插件 ➜一旦添加,设置自动ping到你的网站,这样它就不会闲置 ➜浏览菜单>可用性监控(在设置下) →点击“开启可用性监控” ➜输入要ping的url(例如:http://spokenvote.org) ➜选择1分钟为间隔

你可以使用http://pingdom.com/来检查你的应用;如果每分钟左右执行一次,heroku将不会闲置你的应用程序,也不需要旋转。

我认为最简单的解决方法是每30分钟自我ping你自己的服务器。 下面是我在node.js项目中用来防止睡眠的代码。

const request = require('request');
const ping = () => request('https://<my-app-name>.herokuapp.com/', (error, response, body) => {
    console.log('error:', error); // Print the error if one occurred
    console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
    console.log('body:', body); // Print body of response received
});
setInterval(ping, 20*60*1000); // I have set to 20 mins interval

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

我使用的Heroku调度插件由Heroku免费提供。一旦添加,它就像创建一个带有“curl http://yourapp.herokuapp.com”和10分钟间隔的作业一样简单。