56

Node.jsでHerokuスケジューラを使用する方法についてのチュートリアルは文字通りありません。sayHello()という関数があり、10分ごとに実行したいとします。どうすればコントローラーで使用できますか。rubyではrakefunction_name ()を記述しますが、Nodeの説明はありません。'/ sayHello'と書くことはできますか、それとも追加の設定を行う必要がありますか?

4

6 に答える 6

91

ファイルを作成します<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

それをスクリプトに変換します

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

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

タスクのスケジューリングに関する Heroku のドキュメントは、Ruby スクリプト以外についてはあまり明確ではないことに同意します。試行錯誤の末、なんとか出来上がりました。これが役立つことを願っています。

于 2012-12-19T15:48:08.407 に答える
26

クリストフの答えは、スクリプトにパラメーターを渡す必要があるまではうまくいきましたが、その時点で失敗しました。問題はnode、タスクで指定されるべきではないということです。正確に機能させる方法は次のとおりです。

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

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

于 2014-05-04T12:52:54.137 に答える
0

ここでの以前の回答に感謝します。

feed.jsHeroku でジョブとして実行するスクリプトの場所は次のとおりです。

<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.jsheroku 経由で実行するにheroku run feed.js --app <APP_NAME_NOT_PIPELINE_NAME>.は、heroku コマンドを使用すると、サーバーからジョブnode bin/feed.jsが実行されます。ローカルで実行して、コードが機能することをテストおよび確認します。展開したら、heroku run...コマンドで機能することを確認します

于 2020-06-07T10:43:06.730 に答える