2

Heroku でいくつかの無料のシングル dyno アプリを実行しています。これらのアプリは、しばらくアイドル状態になると「スリープ」状態になります。私は常に起動しているマスター サイトを持っており、時々スリープ状態になるこれらの他のアプリをリンク/利用しています。メイン サイトからスリープ状態のアプリにリンクすると、他のアプリが起動している間、読み込みに時間がかかります。

私がやりたいことは、ユーザーがメイン ページにアクセスした瞬間に、潜在的にスリープ状態にあるアプリをすべて起動することです。これは、ユーザーが必要なときにすばやく応答できるようにするためです。

現在、バックグラウンドで単純なものを使用し$.get(...)ていますが、もちろんコンソールは「Access-Control-Allow-Origin」エラーをスローします。データなどは必要ありません。アプリが稼働中であることを示す何らかの応答だけが必要です。エラーなしでAJAX呼び出しでこれを行う方法を知っている人はいますか?

(または、API などを使用するなど、他の方法がある場合)

4

3 に答える 3

8

可能な解決策は次のとおりです: https://coderwall.com/p/u0x3nw

ここではリンクのみを含む回答は歓迎されないため、リンクの内容を複製します。


Heroku のアイドリング ポリシーを回避する一般的な方法は、1 時間に 1 回 ping を送信して dyno を維持するようにスクリプトを設定することです。

以下を使用して、New Relic の無料プランをアカウントに追加できます。

$ heroku addons:add newrelic:standard

New Relic インターフェイスを開きます。

$ heroku addons:open newrelic

[メニュー] の下の [レポート] セクションで、[可用性] を見つけます。

URL を追加し、ping 時間を 1 時間未満に設定すれば、準備完了です。

スケジューラーの使用

または、New Relic を使用したくない、または使用したくない場合は、Heroku スケジューラを使用して、Heroku 自体を介してキープアライブ dyno ping を実際に設定できます。

たとえば、Ruby を使用している場合、次のような Rake タスクを使用できます。

desc "Pings PING_URL to keep a dyno alive"
task :dyno_ping do
  require "net/http"

  if ENV['PING_URL']
    uri = URI(ENV['PING_URL'])
    Net::HTTP.get_response(uri)
  end
end

PING_URL を Heroku 環境に追加します。

$ heroku config:add PING_URL=http://my-app.herokuapp.com

スケジューラをセットアップします。

$ heroku addons:add scheduler:standard
$ heroku addons:open scheduler

最後のコマンドにより、ブラウザで Scheduler インターフェイスが開きます。dyno_ping タスクを 1 時間に 1 回実行するように設定できるようになりました。

$ rake dyno_ping

(c) Aupajoによる元のブログ投稿

于 2013-08-29T18:46:07.523 に答える
1

エラーは、heroku が別のドメインにあるためですよね? その場合、1 つのオプションは、サーバーから Heroku にリクエストを送信することです。サーバーを定期的にポーリングするために、cron を介して自動化されたタスクをセットアップすることをお勧めします。ほとんどの Linux ホストにはすでにインストールされているため、curl をお勧めします。これは、Edward が推奨したものと同じですが、外部システムを使用する必要はありません。

于 2013-08-29T19:31:12.833 に答える
0

ただするcurl -I <name of project>.herokuapp.com/<some file like index.html or sometext.txt>

次に、これをcronjobとして追加します

于 2020-07-07T16:19:05.273 に答える