web-dev-qa-db-ja.com

Node.jsでHerokuスケジューラを使用する

Node.jsでHerokuスケジューラを使用することに関するチュートリアルは文字通りありません。と呼ばれる関数があると仮定します こんにちはと言う() そして、私はそれを10分ごとに実行したいと思います。コントローラでどのように使用できますか? Rubyあなたが書いた rake function_name() ただし、ノードについての説明はありません。書けますか '/こんにちはと言う' または私は追加の設定を行う必要がありますか?

49
Ali

ファイル<project_root>/bin/say_helloを作成します。

#! /app/bin/node
function sayHello() {
  console.log('Hello');
}
sayHello();
process.exit();

Herokuにデプロイして$ heroku run say_helloでテストし、タスク名say_helloでスケジューラに追加します。

説明

通常say_hello.jsを使用して実行するNode.jsスクリプトの例として$ node say_hello.jsを取り上げます。

それをスクリプトに変える

  1. 末尾の.jsを削除する
  2. 上部に「シバン」を挿入:#! /app/bin/node [1] [2]
  3. binディレクトリに移動します[3]

[1] ウィキペディアのシェバン について読んでください。
[2] node実行可能ファイルは、Herokuのapp/bin/nodeにインストールされます。 Herokuの$ heroku run bashを使用してbashにログインし、$ which nodeに問い合わせることで確認できます。
[3] Herokuでは、binディレクトリにスクリプトを配置する必要があります。 Heroku Dev Centerの Defining Tasks を参照してください。

タスクのスケジュールに関するHerokuのドキュメントがRubyスクリプト以外の場合)についてはあまり明確ではないことに同意します。試行錯誤の結果、なんとか解決できました。これがお役に立てば幸いです。

82
Philip Poots

より良い方法は、たとえばworker.jsというスケジュールファイルを次の内容で定義することです。

function sayHello() {
    console.log('Hello');
}
sayHello();

そしてherokuスケジュールでは、Procfileで定義するようにnode workerと書くだけで、それですべてです!

39

スクリプトにパラメーターを渡す必要があるまで、クリストフの答えはうまくいきました。問題は、タスクでnodeを指定してはならないことです。正確に動作させる方法は次のとおりです。

  1. Procfileで、スクリプトのプロセスタイプを定義します。 Webプロセスを使用した一般的なProcfileと、「scheduled_job.js」を実行するために、想像的に「worker」という名前の2番目のプロセスタイプについては、以下を参照してください。

    web: node app.js
    worker: node scheduled_job.js
    
  2. Herokuスケジューラーの[タスク]列で、プロセスタイプの名前(この例では「worker」)をパラメーター付きまたはパラメーターなしで入力します。 その前に「ノード」を入力しないでください。 Herokuの前にドル記号が表示されるため、有効な設定の例は$ worker(引数なしで実行)または$ worker 123 abc(scheduled_job.jsを引数「123」と「abc」で実行します)

23
Clafou

私は誰も試したことがないと混乱しています:

$ heroku run node yourScript.js

これをHerokuスケジューラに入れます

node yourScript.js

私のために働いた。

PS:スクリプトに必要なすべてのimportを確認してください。

3
Simon Franzen

次の手順は私の状況で機能します。

  1. ルートフォルダーに_worker.js_ファイルを追加します。
  2. Worker.js内。上記のような単純な関数を記述します。 function sayHello() { console.log('Hello'); } sayHello();
  3. Herokuスケジューラアドオンに移動します。 [新しいジョブを追加]をクリックし、フィールドに「ワーカー」と入力します。次に、時間間隔を設定し、[保存]をクリックします。

ここで注意すべき点があります

  1. 更新後の動作設定。上記の例を使用している場合、_heroku run node worker.js_を使用して動作するかどうかを確認できます。端末で「こんにちは」と表示されるはずです。
  2. 私はnode-jsプロジェクトに express-babel スターターを使用しています。
2
陳見綸