4

Heroku のワーカー専用 dyno に NodeJS サーバーをデプロイしたいと考えています。いくつかのアプローチを試しましたが、常にエラーが発生します。

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

私のサーバーは、ファイルや API を提供する必要はありません。Heroku にデプロイする正しい方法は何ですか? 具体的には、firebase-queue 実装のみを Heroku にデプロイする正しい方法は何ですか?

私のサーバーは、キューからの作業の処理専用です。Firebase の場所を監視し、変更に反応します。具体的には、firebase-queue の実装であり、ガイドに記載されている my-queue-worker.js のほぼ正確なコピーです。

var Queue = require('firebase-queue');
var firebase = require('firebase');

firebase.initializeApp({
  serviceAccount: '{projectId: 'xx', clientEmail: 'yy', privateKey: 'zz'}',
  databaseURL: '<your-database-url>'
});

var ref = firebase.database().ref('queue');
var queue = new Queue(ref, function(data, progress, resolve, reject) {
  // Read and process task data
  console.log(data);

 // Do some work
 progress(50);

 // Finish the task asynchronously
  setTimeout(function() {
  resolve();
  }, 1000);
});
4

2 に答える 2

6

Yoni が述べたように、最初の重要な部分は、Web ワーカーではなくバックグラウンド ワーカーのみが必要であることを Heroku に伝えることです。

worker: node <path_to_your_worker>

2 番目の重要な部分は、Heroku がデフォルトで Web dyno を起動することです。これにより、Web トラフィックを受信するポートにアプリケーションがバインドされていない場合、アプリケーションがクラッシュします。Web dyno を無効にしてクラッシュを防ぐには、ディレクトリのコマンドラインから次のコマンドを実行します。

$ heroku ps:scale web=0 worker=1
$ heroku ps:restart

これで問題は解決するはずです。

于 2016-07-29T05:11:55.377 に答える