2016-01-22 9 views
5

मैं एक ReactJS अनुप्रयोग के लिए एक Hapi सर्वर पर काम कर रहा हूँ में विफल रहता है लेकिन जब मैं Heroku को तैनात करने के लिए प्रयास करते हैं, मैं "लॉन्च के 60 सेकंड के भीतर $ पोर्ट करने के लिए बाध्य करने में विफल" R10 त्रुटि मिलती है । क्या हो रहा है? मैं process.env.PORT का उपयोग कर रहा हूँ। मैंने इसके चारों ओर parseInt() भी कोशिश की। विभिन्न पैकेजों को अक्षम करने का भी प्रयास किया। निर्माण हमेशा सफल होता है।Hapi सर्वर पोर्ट बाध्य करने के लिए

हेरोकू लॉग में, मैं index.js ("हैपी चल रहा है ...) से कंसोल लॉग देखता हूं लेकिन फिर R10 त्रुटि दिखाई देती है और सर्वर पुनरारंभ होता है, फिर क्रैश होता है।

==> Hapi उत्पादन सर्वर (एपीआई) पर http://localhost:14316 2016-01-22T15 सुन रहा है: 10: ३३.९४७५७१ + 00: 00 Heroku [web.1]: SIGKILL 2016-01-22T15 साथ प्रक्रिया को रोक रहा है: 10 : 33.947571 + 00: 00 Heroku [web.1]: -: 10: ३४.७३७५५४ +00: त्रुटि R10 (बूट समय समाप्त)> वेब प्रक्रिया लांच के 60 सेकंड के भीतर $ करने के लिए बाध्य करने के लिए पोर्ट 2016-01-22T15 में विफल रहा है 00 Heroku [ वेब .1]: राज्य क्रैश 2016-01-22T15: 10: 34.724233 + 00: 00 heroku [web.1]: स्थिति 137

से बाहर निकलने की प्रक्रिया से बदलकर यह सब स्थानीय रूप से ठीक चलता है जब मैं साथ चलता हूं NODE_ENV = उत्पादन

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

उत्तर

8

process.env.HOST Heroku पर अपरिभाषित गया था, और किसी कारण से यह localhost मेजबान है, जो समस्या के कारण के रूप में पसंद नहीं आया।

मैं बस, सब एक साथ मेजबान वर हटाया तो कनेक्शन लगता है:

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

धन्यवाद! यह मुझे पागल ड्राइव शुरू कर रहा था क्योंकि मेरे पास प्रक्रिया थी .env.port बस ठीक है। वास्तव में यह था कि हेरोकू को 'सर्वर.कनेक्शन ({पोर्ट: पोर्ट, होस्ट: 'लोकलहोस्ट'});' पूरी तरह से 'मेजबान' परम को हटाकर, जैसा आपने सुझाव दिया था, काम नहीं किया। जैसे: 'server.connection ({पोर्ट: पोर्ट});' चीयर्स! – Dominick

+0

मुझे एक ही समस्या थी और मैंने 'होस्ट' संपत्ति को परिभाषित न करके इसे हल किया – Pier

संबंधित मुद्दे