Ich arbeite an einem Hapi-Server für eine ReactJS-App, aber wenn ich versuche, auf Heroku zu implementieren, bekomme ich den R10-Fehler "Fehler beim Binden an $ PORT innerhalb von 60 Sekunden nach dem Start" . Was ist los? Ich benutze process.env.PORT. Ich habe auch parseInt() um es herum versucht. Außerdem wurde versucht, unterschiedliche Pakete zu deaktivieren. Der Build ist immer erfolgreich.Hapi-Server auf Heroku kann Port nicht binden
In den Heroku-Protokollen sehe ich das Konsolenprotokoll von der index.js ("Hapi läuft auf ..."), aber dann erscheint der R10-Fehler und der Server startet neu und stürzt ab.
==> Hapi Production Server (API) hört auf http://localhost:14316 2016-01-22T15: 10: 33,947571 + 00: 00 Heroku [web.1]: mit Prozess Stoppen SIGKILL 2016-01-22T15: 10 : 33.947571 + 00: 00 heroku [web.1]: Fehler R10 (Zeitüberschreitung bei dem Systemstart) -> Der Webprozess konnte nicht innerhalb von 60 Sekunden nach dem Start an $ PORT gebunden werden 2016-01-22T15: 10: 34.77554 + 00: 00 heroku [ web.1]: Status vom Start zum Absturz geändert 2016-01-22T15: 10: 34.724233 + 00: 00 heroku [web.1]: Prozess beendet mit Status 137
Das läuft alles gut lokal wenn ich mit laufe NODE_ENV = Produktion
src/server.js
import Hapi from 'hapi';
import Inert from 'inert';
import jwt from 'hapi-auth-jwt2';
import React from 'react';
import { renderToString } from 'react-dom/server';
import { RoutingContext, match } from 'react-router';
import { Provider } from 'react-redux';
import createRoutes from './routes';
import configureStore from './store/configureStore';
import Html from './Html';
const PROTOCOL = 'http://';
const SERVER_HOST = process.env.HOST || 'localhost';
const SERVER_PORT = process.env.PORT || 3000;
const API_HOST = process.env.API_HOST || 'localhost';
const API_PORT = process.env.API_PORT || 8000;
export default function(callback) {
const server = new Hapi.Server();
server.connection({
host: SERVER_HOST,
port: SERVER_PORT,
labels: ['api'],
// routes: {
// cors: {
// origin: [PROTOCOL + API_HOST + ':' + API_PORT]
// }
// }
});
server.connections[0].name = 'API';
server.register([
{ register: Inert },
{ register: jwt },
// {
// register: api,
// routes: {
// prefix: '/api'
// }
// }
], (err) => {
if(err) {
console.error('ERROR:', err)
throw err;
}
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: 'static'
}
}
});
server.ext('onPreResponse', (request, reply) => {
if (typeof request.response.statusCode !== 'undefined') {
return reply.continue();
}
const assets = {
javascript: {
main: '/dist/bundle.js'
}
};
const store = configureStore();
const routes = createRoutes(store);
// this gets called if server side rendering/routing has problems and errors
function hydrateOnClient() {
reply('<!doctype html>\n' +
renderToString(<Html assets={assets} store={store} />)).code(500);
}
match({ routes, location: request.path }, (error, redirectLocation, renderProps) => {
if (redirectLocation) {
res.redirect(301, redirectLocation.pathname + redirectLocation.search)
} else if (error) {
console.error('ROUTER ERROR:', error) // eslint-disable-line no-console
hydrateOnClient();
} else if (!renderProps) {
// in some cases this would act as a 404 but that should be handled in the routes
hydrateOnClient();
} else {
const component = (
<Provider store={store}>
<RoutingContext {...renderProps} />
</Provider>
);
reply('<!doctype html>\n' +
renderToString(<Html assets={assets} component={component} store={store} />)
);
}
});
});
});
return server.start((err) => {
if(err) {
console.log(err);
throw err;
}
callback(server)
});
}
index.js
require('babel-core/register');
global.__DEVELOPMENT__ = process.env.NODE_ENV !== 'production';
global.__SERVER__ = true;
global.__CLIENT__ = false;
const server = require('./src/server');
server(server => {
for (var key of Object.keys(server.connections)) {
console.info('==> Hapi Production Server (' + server.connections[key].name + ') is listening on', server.connections[key].info.uri);
}
});
es Ihnen danken! Das fing an, mich verrückt zu machen, weil ich das process.env.PORT gut eingerichtet hatte. es war in der Tat, dass Heroku nicht mochte 'server.connection ({port: PORT, host: 'localhost'});' Entfernen der 'Host' param vollständig, wie Sie vorgeschlagen, funktionierte. als solche: 'server.connection ({port: PORT});' prost! – Dominick
Ich hatte das gleiche Problem und habe es auch gelöst, indem ich die Eigenschaft 'host' nicht definiert habe – Pier