在Heroku的免费应用程序中,dyno似乎一直在空转——我的应用程序流量很低,但在我的情况下,我的用户不得不等待20多秒才能启动一个新的dyno,这也是不能接受的。
坦率地说,在这样的等待下,许多人甚至在第一页显示之前就离开了。
所以,我遇到了一个问题:当我每天的流量都在个位数时,我是否应该每月支付36美元来为每个用户节省令人尴尬的漫长20秒?
有没有办法解决这个问题?
在Heroku的免费应用程序中,dyno似乎一直在空转——我的应用程序流量很低,但在我的情况下,我的用户不得不等待20多秒才能启动一个新的dyno,这也是不能接受的。
坦率地说,在这样的等待下,许多人甚至在第一页显示之前就离开了。
所以,我遇到了一个问题:当我每天的流量都在个位数时,我是否应该每月支付36美元来为每个用户节省令人尴尬的漫长20秒?
有没有办法解决这个问题?
当前回答
这就是我的解。
使用谷歌应用程序脚本,设置时间触发器。
// main.js
function ping() {
UrlFetchApp.fetch("https://<Your app>.herokuapp.com/ping_from_GAS");
}
这很简单!
其他回答
将应用程序的URL添加到http://kaffeine.herokuapp.com/。
来自网站:
Kaffeine每30分钟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();
}
}
我有一个只需要在周一到周五午餐时间运行的应用程序。 我刚刚在crontab中添加了以下脚本:
#!/bin/sh
# script to unidle heroku installation for the use with cronjob
# usage in crontab:
# */5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com
# The command /usr/local/bin/uptimer.sh http://www.example.com will execute every 5th minute of 11am through 3pm Mondays through Fridays in every month.
# resources: http://www.cronchecker.net
echo url to unidle: $1
echo [UPTIMER]: waking up at:
date
curl $1
echo [UPTIMER]: awake at:
date
因此,对于任何应用程序,只需在crontab中删除另一行:
*/5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com
这就是我的解。
使用谷歌应用程序脚本,设置时间触发器。
// main.js
function ping() {
UrlFetchApp.fetch("https://<Your app>.herokuapp.com/ping_from_GAS");
}
这很简单!
请注意,新的动态类型(目前是测试版,将于2015年6月发布)将禁止让一个免费的动态保持24/7的唤醒状态,因为它必须每天至少睡6个小时。
所以试着在这篇文章出来之前删除你在这篇文章中找到的任何解决方案(或者为你实际使用的服务付费)。