在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分钟为间隔

如果你有unix服务器的访问权限,你可以设置一个cron作业来获取你的网站。根据免费计划的新条款,您可能希望在夜间禁用get,使用crontab中的一行,如下所示:

*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/null

这指示curl在8点到22点之间每20分钟GET domain.com一次。

请注意

不是每个想看你网站的人都生活在你的时区 您的站点可能会在半夜接收其他请求,从而唤醒您的dyno,并为每个请求增加一个小时的使用时间。即使没有人知道你的域名,也有机器人和爬虫一直在活动。因此,建议将crontab中定义的进程设置为仅活动14到16小时,以提供对这些唤醒的缓冲

另外,确保您的系统时间设置正确,以便停机时间窗口在您期望的时间发生。

还有一个有效的解决方案: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
});

你可以安装免费的New Relic插件。它有一个可用性监控功能,每分钟会ping你的站点两次,从而防止dyno空转。

或多或少与Jesse的解决方案相同,但可能与Heroku更融合…而且还有一些额外的功能(性能监控非常棒)。

注意:对于所有那些说它不起作用的人:我的答案中重要的部分是“可用性监视器”。仅仅安装插件是没有用的。您还需要使用heroku应用程序的URL设置可用性监视。

我认为最简单的解决方法是每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