仅将worker dyno部署到heroku(用于firebase-queue)

时间:2016-07-13 05:28:09

标签: node.js heroku firebase firebase-queue

我想在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 as given in the guide的精确副本

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);
});

2 个答案:

答案 0 :(得分:4)

正如Yoni所说,第一个重要的部分是告诉Heroku你只需要一个后台工作者而不是网络工作者:

worker: node <path_to_your_worker>

第二个重要部分是:默认情况下,Heroku将启动网络动态。如果您的应用程序未绑定到接收Web流量的端口,则会导致应用程序崩溃。要禁用Web dyno并防止崩溃,请从目录中的命令行运行以下命令:

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

这应解决问题!

答案 1 :(得分:2)

看起来你的Procfile包含一个“web”进程类型。 你的Procfile应该是这样的:

worker: node <path_to_your_worker>