Herokuの無料アプリでは、dynosはアイドリングを続けているようです-私のアプリのトラフィックは非常に少ないですが、私の場合、ユーザーが新しいdynoを起動するまで20秒以上待たなければならないこともあまり受け入れられません。
率直に言って、その種の待ち時間で、多くの人は最初のページが表示される前に去ります。
だから、私は問題があります:私のトラフィックが1桁1桁である場合に、各ユーザーに20秒という非常に長い時間を節約するために、月に36ドル支払う必要があります。
これを回避する方法はありますか??
無料の New Relicアドオン をインストールできます。サイトに1分間に2回pingを実行する可用性モニター機能があり、dynoのアイドリングを防ぎます。
多かれ少なかれJesseと同じソリューションですが、Herokuにより統合される可能性があります...そして、いくつかの特典があります(パフォーマンスの監視は素晴らしいです)。
注:それが機能しないと言っているすべての人へ:私の答えの重要な部分は「可用性モニター」です。アドオンをインストールするだけでは役に立ちません。また、herokuアプリのURLを使用して可用性監視を設定する必要があります。
Pingdomの代替として、 ptimerobot を試すことをお勧めします。無料で、5分間隔のサイトチェックを提供します。それは私にとって非常にうまく機能します。
2015年5月7日更新:Herokuは無料のdynoを変更します 24時間生き続けることを防ぐため、これはもはや不可能です:
もう1つの重要な変更は、ダイノスリープまたは「アイドル」に関連しています。有料アプリはアクティビティタイムアウト後に常にスリープしますが、一部のアプリは自動pingサービスを使用してその動作を防ぎます。無料のdynoは24時間ごとに18時間起床できます。今後数週間にわたって、その制限を超えるアプリをユーザーに通知し始めます。趣味のダイノ(月額7ドル)の導入により、タイムアウト後にアプリをスリープ状態にするか、この新しいオプションにアップグレードするように求めています。
これはいつ公開されますか?彼らのブログ投稿によると:
他のdynoチャージを蓄積しない単一の1X dynoを実行するアプリケーションは、7月1日から始まる新しい無料dynoに徐々に移行されます。
私の意見では、サービスの「無料」層を使用することで、実稼働アプリケーションや顧客向けアプリケーションに電力を供給すべきではありません。上記のソリューションはDynoのアイドリングに対して機能しますが、何をしているのかを徹底的に考えてください。
それ以外の場合は、cronジョブを使用してサイトをpingし、既知の低使用期間(夜間など)のチェックを無効にして、Herokuが他のすべてのユーザーの無料利用枠を廃止しないようにします。
http://kaffeine.herokuapp.com (私が作った)を試すこともできます。Herokuアプリがスリープ状態になるのを防ぐために作られています。 10分ごとにアプリにpingが送信されるため、アプリはスリープ状態になりません。完全に無料です。
http://pingdom.com/ を使用してアプリを確認できます。 1分ごとに完了すると、herokuはアプリをアイドル状態にせず、スピンアップする必要がなくなります。
簡単な答え-サービスを評価してから料金を支払う場合。
有料サービスのメリットを得るためのこれらすべての「トリック」...それは基本的にケーブルを盗むようなものです。ここにそれらをリストすることさえ疑わしい。次に、ゲームを海賊版にする方法の秘trickは何ですか?
ここの別のポスターのように、私は開発とテストのための無料サービスを高く評価しています。フリーローダーが多すぎるためにHerokuがこれをやめた場合、倫理に障害のあるすべてのタイプに非常に悩まされます。私は彼が彼の批判で十分に直接的だったとは思わない。
6/28/2013に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が提案するように、おそらく0.09ドル/時間よりも安価なソリューションです。
手順を書き留めました。
gemステージングとプロダクションでGemfileにgem 'newrelic_rpm'を追加します
➜バンドルインストール
➜herokuコントロールパネルにログインし、newrelicアドオンを追加します
➜追加したら、アイドル状態にならないようにWebサイトに自動pingを設定します
➜メニュー>可用性監視([設定]の下)を参照→[可用性監視を有効にする]をクリック
➜pingするURLを入力します(例: http://spokenvote.org )
➜間隔に1分を選択します
あなたのサイトに絶えずpingを送信するUnidlerという別の無料サイトを見つけました
Pingdomと同じですが、ログインする必要はありません。
新しいdynoタイプ( 現在ベータ版 、2015年6月に着信)は、1日あたり少なくとも6時間スリープする必要があるため、24時間365日無料で目覚めたdynoを保持することを禁止します。
したがって、このスレッドが見つかる前に、このスレッドで見つけた解決策をすべて削除してみてください(または実際に使用したサービスの料金を支払います)。
常に稼働しているUNIXサーバーにアクセスできる場合は、cronジョブをWebサイトのGET
に設定できます。無料プランの新しい条件では、おそらく次のようなcrontabの行を使用して、夜間にGET
sを無効にすることをお勧めします。
*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/null
これは、8時から22時までの20分ごとにcurl
にGET
domain.comに指示します。
を注意
また、ダウンタイムウィンドウが予想どおりに発生するように、システム時間が適切に設定されていることを確認してください。
ガイ、これは複数のherokuアプリを維持するために実行できるherokuアプリです。 config.jsonでpingするURLを追加するだけです。
これは、春のアプリケーションで2分ごとに1つのhttpリクエストをルートURLパスに作成する私にとってはうまくいきます `
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