Node.jsでHerokuスケジューラを使用することに関するチュートリアルは文字通りありません。と呼ばれる関数があると仮定します こんにちはと言う() そして、私はそれを10分ごとに実行したいと思います。コントローラでどのように使用できますか? Rubyあなたが書いた rake function_name() ただし、ノードについての説明はありません。書けますか '/こんにちはと言う' または私は追加の設定を行う必要がありますか?
ファイル<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
を取り上げます。
それをスクリプトに変える
.js
を削除する#! /app/bin/node
[1] [2]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スクリプト以外の場合)についてはあまり明確ではないことに同意します。試行錯誤の結果、なんとか解決できました。これがお役に立てば幸いです。
より良い方法は、たとえばworker.js
というスケジュールファイルを次の内容で定義することです。
function sayHello() {
console.log('Hello');
}
sayHello();
そしてherokuスケジュールでは、Procfile
で定義するようにnode worker
と書くだけで、それですべてです!
スクリプトにパラメーターを渡す必要があるまで、クリストフの答えはうまくいきました。問題は、タスクでnode
を指定してはならないことです。正確に動作させる方法は次のとおりです。
Procfileで、スクリプトのプロセスタイプを定義します。 Webプロセスを使用した一般的なProcfileと、「scheduled_job.js」を実行するために、想像的に「worker」という名前の2番目のプロセスタイプについては、以下を参照してください。
web: node app.js worker: node scheduled_job.js
Herokuスケジューラーの[タスク]列で、プロセスタイプの名前(この例では「worker」)をパラメーター付きまたはパラメーターなしで入力します。 その前に「ノード」を入力しないでください。 Herokuの前にドル記号が表示されるため、有効な設定の例は$ worker
(引数なしで実行)または$ worker 123 abc
(scheduled_job.jsを引数「123」と「abc」で実行します)
私は誰も試したことがないと混乱しています:
$ heroku run node yourScript.js
これをHerokuスケジューラに入れます
node yourScript.js
私のために働いた。
PS:スクリプトに必要なすべてのimport
を確認してください。
次の手順は私の状況で機能します。
worker.js
_ファイルを追加します。function sayHello() { console.log('Hello'); } sayHello();
ここで注意すべき点があります
heroku run node worker.js
_を使用して動作するかどうかを確認できます。端末で「こんにちは」と表示されるはずです。