Node.jsでHerokuスケジューラを使用する方法についてのチュートリアルは文字通りありません。sayHello()という関数があり、10分ごとに実行したいとします。どうすればコントローラーで使用できますか。rubyではrakefunction_name ()を記述しますが、Nodeの説明はありません。'/ sayHello'と書くことはできますか、それとも追加の設定を行う必要がありますか?
6 に答える
ファイルを作成します<project_root>/bin/say_hello
。
#! /app/.heroku/node/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]実行ファイルがHeroku にnode
インストールされます。app/bin/node
Heroku で bash にログインして確認でき$ heroku run bash
ます$ which node
。
[3] Heroku では、スクリプトをbin
ディレクトリに配置する必要があります。Heroku Dev Center のタスクの定義を参照してください。
タスクのスケジューリングに関する Heroku のドキュメントは、Ruby スクリプト以外についてはあまり明確ではないことに同意します。試行錯誤の末、なんとか出来上がりました。これが役立つことを願っています。
クリストフの答えは、スクリプトにパラメーターを渡す必要があるまではうまくいきましたが、その時点で失敗しました。問題はnode
、タスクで指定されるべきではないということです。正確に機能させる方法は次のとおりです。
Procfile で、スクリプトのプロセス タイプを定義します。Web プロセスを含む典型的な Procfile については以下を参照してください。また、「scheduled_job.js」を実行する場合は、「worker」という想像上の名前の 2 番目のプロセス タイプを参照してください。
web: node app.js worker: node scheduled_job.js
Heroku スケジューラーの [タスク] 列に、プロセス タイプの名前 (この例では「worker」) をパラメーター付きまたはパラメーターなしで入力します。その前に 'node' を入力しないでください。Heroku はその前にドル記号を表示するため、有効なセットアップの例は
$ worker
(引数なしで実行) または$ worker 123 abc
(引数 "123" と "abc" で Scheduled_job.js を実行する) になります。
ここでの以前の回答に感謝します。
feed.js
Heroku でジョブとして実行するスクリプトの場所は次のとおりです。
<PROJECT_ROOT>/bin/feed.js
の内容は次でfeed.js
始まります。
#!/usr/bin/env node
async function mediumFeed() {
await fetch('https://medium.com/feed/stokedinfluence')
そして次で終わります:
}
mediumFeed();
Heroku では、ジョブは次のように定義されnode bin/medium_feed.js
ます。
node js スクリプトをローカルで実行するfeed.js
には、プロジェクト ディレクトリのルートから使用でき、node bin/feed.js
heroku 経由で実行するにheroku run feed.js --app <APP_NAME_NOT_PIPELINE_NAME>.
は、heroku コマンドを使用すると、サーバーからジョブnode bin/feed.js
が実行されます。ローカルで実行して、コードが機能することをテストおよび確認します。展開したら、heroku run...
コマンドで機能することを確認します