2016-07-13 1 views
3

Ich möchte einen NodeJS-Server auf einem Nur-Arbeiter-Dyno auf Heroku bereitstellen. Ich habe mehrere Ansätze ausprobiert, aber ich bekomme immer den Fehler:Nur Arbeiter-Dyno in Heroku bereitstellen (für Firebase-Warteschlange)

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

Mein Server muss keine Dateien oder eine API liefern. Was ist der richtige Weg für die Bereitstellung auf Heroku? Was ist der richtige Weg, um nur eine Firebase-Queue-Implementierung für Heroku bereitzustellen?

Mein Server ist für die Verarbeitung von Aufgaben aus einer Warteschlange vorgesehen. Er überwacht einen Firebase-Standort und reagiert auf Änderungen. Insbesondere ist es eine Feuerbasis-Warteschlange Implementierung, fast eine exakte Kopie von 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); 
}); 

Antwort

4

Der erste wichtige Teil, wie von Yoni erwähnt, ist Heroku zu sagen, dass Sie nur einen Hintergrund Arbeiter und nicht einen Web-Arbeiter müssen:

worker: node <path_to_your_worker> 

Der zweite wichtige Teil ist: Heroku startet standardmäßig einen Web-Dyno. Dies führt zum Absturz der Anwendung, wenn Ihre Anwendung nicht an den Port gebunden ist, auf dem der Web-Datenverkehr empfangen wird. Um den Web-dyno zu deaktivieren und den Absturz zu verhindern, führen Sie die folgenden Befehle von der Kommandozeile im Verzeichnis:

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

Dies sollte das Problem beheben!

+0

Hilfe oder ähnliches Beispiel für die Implementierung der Firebase-Warteschlange in die App-Engine? – TheeBen

+0

Leider nicht –

+0

Danke für den Kommentar – TheeBen

2

Es sieht aus wie Ihre procfile einen "web" Typen Prozess enthält. Ihre procfile sollten wie folgt aussehen:

worker: node <path_to_your_worker> 
+0

Danke, ich habe es vorher versucht. Checked jetzt wieder. Stellt sich heraus, dass Heroku automatisch einen Web-Dyno startet. Wenn der Port nicht gebunden ist, skaliert er automatisch die Web-Dynos auf Null. Danke für die Hilfe. –

+0

Wenn diese Antwort nützlich ist, klicken Sie auf die Schaltfläche "Upvote" links davon. Wenn es Ihre Frage beantwortet hat, klicken Sie auf das Häkchen, um es zu akzeptieren. Auf diese Weise wissen andere, dass Ihnen (ausreichend) geholfen wurde. –