Herokuの無料アプリでは、dynoがアイドリングを続けているようです。私のアプリのトラフィックは非常に少ないですが、ユーザーが新しいdynoを起動するために20秒以上待たなければならない場合も、許容できません。
率直に言って、そのような待ち時間があると、最初のページが表示される前に多くの人が去ります。
したがって、問題があります。トラフィックが1日1桁の場合、各ユーザーに20秒間という厄介なほど長い時間を節約するために、月額36ドルを払う必要があります。
これを回避する方法はありますか?
Herokuの無料アプリでは、dynoがアイドリングを続けているようです。私のアプリのトラフィックは非常に少ないですが、ユーザーが新しいdynoを起動するために20秒以上待たなければならない場合も、許容できません。
率直に言って、そのような待ち時間があると、最初のページが表示される前に多くの人が去ります。
したがって、問題があります。トラフィックが1日1桁の場合、各ユーザーに20秒間という厄介なほど長い時間を節約するために、月額36ドルを払う必要があります。
これを回避する方法はありますか?
回答:
無料のNew Relicアドオンをインストールできます。これには、1分に2回サイトにpingする可用性モニター機能があり、dynoがアイドル状態になるのを防ぎます。
Jesseとほぼ同じソリューションですが、Herokuに統合されている可能性があります...そして、いくつかの特典があります(パフォーマンスモニタリングは優れています)。

注:それが機能しないと言っているすべての人に:私の答えの重要な部分は「可用性モニター」です。アドオンをインストールするだけでは役に立ちません。また、herokuアプリのURLを使用して可用性監視を設定する必要があります。
Pingdomの代わりに、Uptimerobotを試すことをお勧めします。これは無料で、5分の間隔でサイトをチェックできます。私にとっては非常にうまくいきます。
2015年5月7日更新:Herokuは 24時間フル稼働しないように無料のdynoを変更するため、これはもう不可能です。
もう1つの重要な変更は、dyno睡眠、または「アイドル」に関係しています。有料アプリは常にアクティビティのタイムアウト後にスリープしていましたが、一部のアプリは自動pingサービスを使用してその動作を防止しました。無料のdynoは24時間ごとに18時間起きることが許可されており、今後数週間で、その制限を超えるアプリをユーザーに通知し始めます。hobby dyno(月額7ドル)の導入に伴い、タイムアウト後にアプリをスリープさせるか、この新しいオプションにアップグレードするように求めています。
これはいつライブになるのですか?彼らのブログ投稿によると:
1つの1X dynoを実行していて、他のdyno料金を累積しないアプリケーションは、7月1日から新しい無料のdynoに徐々に移行されます。
http://てエラーを得ました。
私の意見では、サービスの「無料」層を使用することは、本番アプリケーションや顧客向けアプリケーションを強化するものではありません。上記の解決策はDynoのアイドリングに対して有効ですが、何をしているのかを十分に考えてください。
他に何もない場合は、cronジョブを使用してサイトにpingを送信し、既知の低使用期間(つまり、夜間)のチェックを無効にして、Herokuが他のすべてのユーザーの無料枠を排除しないようにします。
また、http://kaffeine.herokuapp.com(私が作成)を試すこともできます。これは、Herokuアプリがスリープ状態にならないようにするために作成されています。アプリは10分ごとにpingするため、アプリはスリープ状態になりません。それは完全に無料です。
アプリをチェックするにはhttp://pingdom.com/を使用できます。毎分程度の場合、herokuはアプリをアイドル状態にすることはなく、スピンアップする必要もありません。
簡単な答え-サービスを重視する場合は、料金を支払います。
有料サービスのメリットを得るためのこれらすべての「トリック」...まあ、それは基本的にケーブルを盗むようなものです。ここにそれらをリストすることさえ疑わしい。次は何ですか、ゲームを海賊版する方法のトリック?
ここの他のポスターのように、私は開発とテストのための無料サービスを評価します。そして、Herokuがフリーローダーが多すぎるためにそれを排除した場合、私はあなたのすべての倫理障害タイプに大いに悩まされます。私は彼が彼の批判を十分に率直であったとは思いません。
2013年6月28日にNode.js 0.10.xを使用して自分のHerokuアプリでテストおよび作業
var http = require('http'); //importing http
function startKeepAlive() {
setInterval(function() {
var options = {
host: 'your_app_name.herokuapp.com',
port: 80,
path: '/'
};
http.get(options, function(res) {
res.on('data', function(chunk) {
try {
// optional logging... disable after it's working
console.log("HEROKU RESPONSE: " + chunk);
} catch (err) {
console.log(err.message);
}
});
}).on('error', function(err) {
console.log("Error: " + err.message);
});
}, 20 * 60 * 1000); // load every 20 minutes
}
startKeepAlive();
Herokuが提供するHeroku Schedulerアドオンを無料で使用しています。追加したら、「curl http://yourapp.herokuapp.com」と10分間隔でジョブを作成するだけです。
Herokuのドキュメントでは、複数のWeb dynoがあっても決してアイドル状態になることはないとしています。おそらく、Pierreが提案するように、1時間あたり0.09ドルよりも安価なソリューションです。

手順を書き留めました。
gステージングと本番環境でGemfileにgem 'newrelic_rpm'を追加します
➜バンドルインストール
her herokuコントロールパネルにログインしてnewrelicアドオンを
追加しますadded追加したら、アイドル状態にならないようにWebサイトへの自動pingをセットアップします
Menuメニューに移動>可用性の監視( [設定]の下で)→[可用性監視をオンにする]をクリック
しますpingするURLを入力します(例:http : //spokenvote.org)
the間隔として1分を選択します
新しいdynoタイプ(現在ベータ版、2015年6月にリリース)では、1日あたり少なくとも6時間はスリープ状態にする必要があるため、24時間年中無休で無料のdynoを起こし続けることはできません。
そのため、このスレッドで見つかったすべてのソリューションを削除する前に、削除するようにしてください(または実際に使用するサービスの料金を支払います)。
常に稼働しているUNIXサーバーにアクセスできる場合はGET、Webサイトにcronジョブを設定できます。無料プランの新しい条件の下では、おそらく次のGETようなcrontabの行を使用して、夜間にを無効にする必要があります。
*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/null
これは、8時から22時までの間、20分ごとcurlにGETdomain.comに指示します。
を注意
また、システム時間が適切に設定されていることを確認して、予想どおりにダウンタイムウィンドウが発生するようにしてください。
ここでの回答のほとんどは古くなっているか、現在機能していません。個人アカウントの現在の無料枠は、毎月 550時間の無料dyno時間を提供します。
確認済みの無料アカウントでは、1000時間の無料dynoが提供されます。無料アプリをいつまでも目覚めさせ続ける方法についての記事を書きました。
https://link.medium.com/uDHrk5HAD0
2019年にソリューションを必要としているすべての人に役立つことを願っています
これは私にとって春のアプリケーションで2分ごとにルートURLパスに1つの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アプリです。pingするURLをconfig.jsonに追加するだけです。
月曜から金曜のランチタイムに実行する必要があるアプリがあります。作業中の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
これに対する最も簡単な修正は、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
もう一つの作業溶液: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
});
cronジョブで十分です。https://cron-job.orgを参照してください。無料で信頼できます。