在 Heroku 上运行 firebase node.js 时出现错误 R10(启动超时)
Posted
技术标签:
【中文标题】在 Heroku 上运行 firebase node.js 时出现错误 R10(启动超时)【英文标题】:Error R10 (Boot timeout) when running firebase node.js on Heroku 【发布时间】:2017-02-15 18:49:34 【问题描述】:我有类似这个的 node.js 代码:
var firebase = require('firebase');
var request = require('request');
var API_KEY = "..."; // Your Firebase Cloud Server API key
firebase.initializeApp(
serviceAccount: ".json",
databaseURL: "https://.firebaseio.com/"
);
ref = firebase.database().ref();
function listenForNotificationRequests()
var requests = ref.child('notificationRequests');
ref.on('child_added', function(requestSnapshot)
var request = requestSnapshot.val();
sendNotificationToUser(
request.username,
request.message,
function()
request.ref().remove();
);
, function(error)
console.error(error);
);
;
function sendNotificationToUser(username, message, onSuccess)
request(
url: 'https://fcm.googleapis.com/fcm/send',
method: 'POST',
headers:
'Content-Type' :' application/json',
'Authorization': 'key='+API_KEY
,
body: JSON.stringify(
notification:
title: message
,
to : '/topics/user_'+username
)
, function(error, response, body)
if (error) console.error(error);
else if (response.statusCode >= 400)
console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage);
else
onSuccess();
);
// start listening
listenForNotificationRequests();
我的问题是如何在 heroku 上运行它?当我尝试时,它给了我 Error R10 (Boot timeout) -> Web 进程在启动后 60 秒内无法绑定到 $PORT。 Procfile是这样的:
worker: node server.js
【问题讨论】:
【参考方案1】:这是我的猜测:
您的代码中可能有类似的内容(只是未发布):
var http = require('http');
http.createServer(server.js);
server.listen(5000);
好吧,server.listen(5000);
正在强制应用连接到端口 5000 并进行监听。
Heroku 不能那样工作。它会自动为您的env
分配一个端口并使用它。所以你需要告诉你的应用“嘿,使用env
端口,或者使用5000作为备份”。你可以这样做:
server.listen(process.env.PORT || 5000);
同样,考虑到您没有发布引用端口号的代码,这只是一个猜测。我的示例可能与您的示例不同,但总体概念相同。
【讨论】:
我的代码也不使用端口。否则我会改变它,我会尝试你的建议,看看效果如何。【参考方案2】:我是这样解决的:
//add this in the begining
var express = require('express');
var app = express();
app.set('port', (process.env.PORT || 5000));
//this at the end
app.listen(app.get('port'), function()
listenForNotificationRequests();
);
【讨论】:
我知道这是问题所在,但这是人们遇到这种情况时应该使用的代码。以上是关于在 Heroku 上运行 firebase node.js 时出现错误 R10(启动超时)的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试启动应用程序时,在heroku中“无法确定Firebase数据库URL”错误是什么意思?
Firebase Angular 应用程序未连接 Heroku 上的 h NodeJS 应用程序
需要 Firebase JSON 的 Django 应用程序的 Heroku 配置?