2016-01-22 17 views
5

Bir ReactJS uygulaması için bir Hapi sunucusunda çalışıyorum ancak Heroku'ya konuşlandırmaya çalıştığımda, R10 hatası "Başlatma 60 saniye içinde $ PORT'a bağlanılamadı" hatası alıyorum . Ne oluyor? Process.env.PORT kullanıyorum. Ayrıca parseInt() etrafında çalıştı. Ayrıca değişen paketleri devre dışı bırakmaya çalıştı. Yapı her zaman başarılıdır.Heroku üzerindeki Hapi sunucusu bağlantı noktasını bağlamada başarısız oluyor

Heroku günlüklerinde, konsol günlüğünü index.js'den ("Hapi üzerinde çalışıyor ...") görüyorum ancak R10 hatası görüntüleniyor ve sunucu yeniden başlatılıyor, daha sonra çöküyor.

==> Hapi Üretim Sunucusu (API) http://localhost:14316 2016-01-22T15 dinlediği: 10: 33,947571 + 00: 00 Heroku [web.1]: SIGKILL 2016-01-22T15 ile işlem Durdurma: 10 : 33.947571 + 00: 00 heroku [web.1]: Hata R10 (Önyükleme zaman aşımı) -> Web işleminin başlatılması 60 saniye içinde $ PORT'a bağlanamadı 2016-01-22T15: 10: 34.737554 + 00: 00 heroku [ web.1]: Durum çökmeye başladıktan sonra değişti 2016-01-22T15: 10: 34.724233 + 00: 00 heroku [web.1]: İşlem 137

ile çıkıldı. NODE_ENV = üretim

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

cevap

8

process.env.HOST Heroku üzerinde tanımsız edildi ve nedense konuyu neden ev sahibi olarak localhost gibi değildi.

server.connection({ 
    port: process.env.PORT || 3000, 
    labels: ['api'], 
}) 
+1

teşekkür ederim: benzeri bağlantı görünmesi için

Sadece, hep birlikte ev sahibi Var kaldırıldı! Bu beni deli ediyordu çünkü process.env.PORT sadece iyi ayarlanmıştı. Gerçekten de, Heroku'nun, önerdiğiniz gibi "host" paramını tamamen kaldırarak 'server.connection ({bağlantı noktası: PORT, host: 'localhost'}); . gibi: 'server.connection ({port: PORT}); Şerefe! – Dominick

+0

Aynı problemi yaşadım ve 'host' özelliğini tanımlamamış olarak da çözdüm – Pier

İlgili konular