Heroku + node.js त्रुटि (लॉन्च के 60 सेकंड के भीतर वेब पोर्ट $ PORT से जुड़ने में विफल रही)


447

मेरे पास अपना पहला नोड। जेएस ऐप है (स्थानीय रूप से ठीक चलता है) - लेकिन मैं इसे हरोकू (पहली बार w / हरकू के साथ-साथ) के माध्यम से तैनात करने में असमर्थ हूं। कोड नीचे है। SO ने मुझे इतना कोड लिखने की अनुमति नहीं दी है, इसलिए मैं सिर्फ इतना कहूंगा कि स्थानीय रूप से और साथ ही मेरे नेटवर्क के भीतर कोड को चलाना कोई समस्या नहीं है।

 var http = require('http');
 var fs = require('fs');
 var path = require('path');

 http.createServer(function (request, response) {

    console.log('request starting for ');
    console.log(request);

    var filePath = '.' + request.url;
    if (filePath == './')
        filePath = './index.html';

    console.log(filePath);
    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
    }

    path.exists(filePath, function(exists) {

        if (exists) {
            fs.readFile(filePath, function(error, content) {
                if (error) {
                    response.writeHead(500);
                    response.end();
                }
                else {
                    response.writeHead(200, { 'Content-Type': contentType });
                    response.end(content, 'utf-8');
                }
            });
        }
        else {
            response.writeHead(404);
            response.end();
        }
    });

 }).listen(5000);

 console.log('Server running at http://127.0.0.1:5000/');

कोई उपाय ?


क्या आप यहां अपना कोड पोस्ट कर सकते हैं? अधिमानतः .listen () भाग यदि आप एक http सर्वर शुरू कर रहे हैं
बेंजामिन Gruenbaum

जवाबों:


989

हरोकू गतिशील रूप से आपके ऐप को एक पोर्ट प्रदान करता है, इसलिए आप पोर्ट को एक निश्चित संख्या में सेट नहीं कर सकते। Heroku env में पोर्ट जोड़ता है, इसलिए आप इसे वहां से खींच सकते हैं। इसे सुनने के लिए अपनी स्विच करें:

.listen(process.env.PORT || 5000)

इस तरह यह अभी भी 5000 पोर्ट को सुनेगा जब आप स्थानीय स्तर पर परीक्षण करेंगे, लेकिन यह हरोकू पर भी काम करेगा।

आप यहाँ Node.js पर हरोकू डॉक्स देख सकते हैं


97
महत्वपूर्ण है कि आप process.env.PORT का उपयोग करें और process.env.port का नहीं।
गुरपसंत

सुंदर! मेरे लिए 'वेबसोकेट' मॉड्यूल के साथ काम किया।
फिल्क्स_एक्स


2
धन्यवाद, मेरे लिए भी काम किया। मुझे आश्चर्य है कि यह
हेरोकू

@redhotvengeance धन्यवाद .. उल्लेख है कि यह संवेदनशील है और दिन बचाओ :)
महेंद्रन

34

त्रुटि होता है जब Heroku बंदरगाह या होस्टनाम बाध्य करने में विफल रहा है पर server.listen(port, [host], [backlog], [callback])

हेरोकू की आवश्यकता क्या है .listen(process.env.PORT)या है.listen(process.env.PORT, '0.0.0.0')

अन्य वातावरणों का समर्थन करने के लिए इतना अधिक उदारतापूर्वक, इसका उपयोग करें:

var server_port = process.env.YOUR_PORT || process.env.PORT || 80;
var server_host = process.env.YOUR_HOST || '0.0.0.0';
server.listen(server_port, server_host, function() {
    console.log('Listening on port %d', server_port);
});

6
निम्नलिखित कॉल के साथ: app.listen (सर्वरपार्ट, "लोकलहोस्ट", फंक्शन (इरेट) {हेरोकू विफल हो रहा था। "लोकलहोस्ट" को "0.0.0.0" पर स्विच करने में मदद मिली। धन्यवाद!
pubsy

31

यह ध्यान देने योग्य है कि यदि आपका कोड पोर्ट निर्दिष्ट नहीं करता है, तो यह एक webप्रक्रिया नहीं होनी चाहिए और शायद workerइसके बजाय एक प्रक्रिया होनी चाहिए ।

तो, अपने Procfileपढ़ने के लिए (अपने विशिष्ट आदेश के साथ भरा) बदलें :

worker: YOUR_COMMAND

और फिर CLI पर भी चलें:

heroku scale worker=1

1
मेरे पास एक ही मुद्दा था कि मैं आईपी के साथ 'लोकलहोस्ट' की जगह '0.0.0.0' वाले मुद्दे को हल कर सकता हूं
दिमित असांका

2
मैं हेरोकू पर एक डिस्क बॉट चला रहा हूं, और इसने मुझे एक पाश के लिए फेंक दिया। स्लैक, हिपचैट, आदि बॉट्स के समान मुद्दे हो सकते हैं।
Skylar

1
यदि आप इस मार्ग पर जाते हैं, तो संसाधन टैब पर जाना सुनिश्चित करें, वेब प्रक्रिया बंद करें और कार्यकर्ता प्रक्रिया चालू करें। इस तरह से हरकोको पोर्ट बाइंडिंग की उम्मीद नहीं करेगा।
इसहाक लाइमैन

1
ओह्ह बहुत बहुत धन्यवाद। मैं यह देखने की कोशिश कर पागल हो गया। मुझे पता नहीं था कि वेब और वर्कर एप्लिकेशन प्रोकफाइल के संदर्भ में हरोकू में भिन्न हैं। यह ध्यान देने योग्य है कि उन्हें startमेरी स्क्रिप्ट में जोड़ने की जरूरत थीpackage.json
ऋषव

1
मेरे मामले में मैंने वेब से कार्यकर्ता तक के परिवर्तन को बदल दिया। इसने काम कर दिया!! Thkns
rodrigorf

27

योमन की कोणीय-फुलस्टैक जनरेट प्रोजेक्ट का उपयोग करते समय और आईपी पैरामीटर को हटाने के दौरान मेरे पास एक ही मुद्दा था।

मैंने इस कोड को बदल दिया

server.listen(config.port, config.ip, function () {
  console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});

साथ में

server.listen(config.port, function () {
  console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});

25

उन दोनों के लिए जो एक बंदरगाह और एक मेजबान से गुजर रहे हैं, ध्यान रखें कि हरोकू के लिए बाध्य नहीं होगा localhost

आपको पास होना चाहिए 0.0.0.0 मेजबान के लिए ।

भले ही आप सही पोर्ट का उपयोग कर रहे हों। हमें यह समायोजन करना था:

# port (as described above) and host are both wrong
const host = 'localhost';
const port = 3000;

# use alternate localhost and the port Heroku assigns to $PORT
const host = '0.0.0.0';
const port = process.env.PORT || 3000;

फिर आप हमेशा की तरह सर्वर शुरू कर सकते हैं:

app.listen(port, host, function() {
  console.log("Server started.......");
});

आप अधिक विवरण यहाँ देख सकते हैं: https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error


3
यह उत्तर न केवल अधिक पूर्ण है, बल्कि एकमात्र ऐसा है जो दो संभावित समस्याओं को लक्षित करता है। मेरे मामले में पोर्ट कॉन्फ़िगरेशन सही था, लेकिन सुनने का पता नहीं। यह स्वीकृत उत्तर होना चाहिए।
डैनियलो ५१५

मेरे मामले में यह काम करता है जैसा कि मैं नीचे बदलता const port = 3000;है const port = process.env.PORT || 3000; यह हरोकू पर काम करता है
vpgodara

केवल एक चीज जो वास्तव में मेरे लिए काम करती थी, धन्यवाद
इब्राहिम मोहम्मद

10

मेरे मामले में, मैं https://hapijs.com/ से उदाहरण का उपयोग कर रहा था

मेरे द्वारा प्रतिस्थापित समस्या को ठीक करने के लिए

server.connection({ 
    host: 'localhost', 
    port: 8000 
});

साथ में

server.connection({
    port: process.env.PORT || 3000 
});

और process.env.PORTसही ढंग से निर्दिष्ट करने के लिए उपयोग करने वालों के लिए , लेकिन hostपरम में छोड़कर : आप यहां नहीं देख सकते हैं: stackoverflow.com/a/34956330/626369
डोमिनिक


2

मेरे मामले में, मैं बैबेल -प्लगइन-ट्रांसफ़ॉर्म-इनलाइन-पर्यावरण-चर प्लगइन के साथ बैबेल का उपयोग कर रहा था । स्पष्ट रूप से, हरोकू एक तैनाती करते समय पोर्ट एनवी चर को सेट नहीं करता है, इसलिए process.env.PORTइसे बदल दिया जाएगा undefined, और आपका कोड विकास पोर्ट पर वापस आ जाएगा, जिसके बारे में हरोकू को कुछ भी पता नहीं है।


1

संपादित करें package.json:

...
"engines": {
"node": "5.0.0",
"npm": "4.6.1"
},
...

और Server.js:

...
var port = process.env.PORT || 3000;
app.listen(port, "0.0.0.0", function() {
console.log("Listening on Port 3000");
});
...

मेरे मामले में मैंने वह हिस्सा निकाल लिया package.json। मेरा मानना ​​है कि इसे अपडेट करने से इस समस्या का समाधान भी होना चाहिए।
मार्क

1

मेरे पास एक ही मुद्दा था क्योंकि मैंने परिभाषित नहीं किया था Procfile। अपने ऐप की रूट डायरेक्टरी में एक टेक्स्ट फाइल को कमिट करें जिसे Procfilबिना फाइल एक्सटेंशन के e नाम दिया गया है । यह फ़ाइल Heroku को बताती है कि कौन सी कमांड (ओं) को अपना ऐप शुरू करने के लिए चलाना है।

web: node app.js

धन्यवाद, मैं यह करना भूल गया। इस फ़ाइल के बिना, हरोकू फाइलों को पूरी तरह से अनदेखा कर देता है।
व्लादिमीर डेस्पोटोविक

0

मेरे पास वही मुद्दा था जो मैं आईपी के साथ 'लोकलहोस्ट' की जगह समस्या का समाधान कर सकता था जो '0.0.0.0' है।


0

पोर्ट के लिए एक निश्चित संख्या निर्धारित नहीं की जा सकती है, हरोकू गतिशील रूप से इसका उपयोग करता है process.env.PORT। लेकिन आप उन दोनों को इस तरह से जोड़ सकते हैं process.env.PORT || 5000। हरोकू पहले एक का उपयोग करेगा, और आपकी स्थानीयहोस्ट दूसरी का उपयोग करेगी।

आप अपना कॉल बैक फ़ंक्शन भी जोड़ सकते हैं। नीचे दिए गए कोड को देखें

app.listen(process.env.PORT || 5000, function() {
    console.log("Server started.......");
});

0

सभी समाधान में मैंने अपेक्षा के अनुसार कोई काम नहीं किया है, मैं डिफ़ॉल्ट रूप से हेरोकू का अध्ययन करता हूं .env फ़ाइल को कन्वेंशन पोर्ट बनाए रखना चाहिए, प्रक्रिया ।env.PORT, हरको डिफ़ॉल्ट रूप से कीवर्ड कीवर्ड के लिए दिखेगा।

किसी भी नामकरण को रद्द करें जैसे कि APP_PORT = इसके बजाय अपनी env फ़ाइल में PORT = का उपयोग करें।


0

हरोकू बैश प्रक्रिया से, यार की तरह विकल्प पार्सर का उपयोग करके अपने नोड ऐप में $ PORT के मूल्य को कम करें।

यहाँ एक उदाहरण है कि आप ऐसा कैसे कर सकते हैं। स्क्रिप्ट ऑब्जेक्ट पर, package.json के अंदर, एक आरंभ विधि "नोड सर्वर --पोर्ट $ पोर्ट" जोड़ें।

अपनी सर्वर फ़ाइल में, स्टार्ट विधि के पोर्ट विकल्प (--port $ PORT) से मान प्राप्त करने के लिए यार्ग का उपयोग करें:

const argv = require('yargs').argv;
const app = require('express')();

const port = argv.port || 8081;

app.listen(argv.port, ()=>{
    console.log('Probably listening to heroku $PORT now ', argv.port); // unless $PORT is undefined, in which case you're listening to 8081.
});

अब जब आपका ऐप शुरू होगा, तो यह $ PORT के डायनामिकली सेट वैल्यू से बंध जाएगा।


0

अगर, मेरी तरह, आप अपनी package.jsonफ़ाइल पर एक स्क्रिप्ट चलाने के लिए Heroku को कॉन्फ़िगर कर रहे हैं, तो सुनिश्चित करें कि आपने PORTउस स्क्रिप्ट के मूल्य को हार्ड-कोड नहीं किया है! यदि आप करते हैं, तो आप मेरी तरह समाप्त हो जाएंगे और एक घंटे बिताने की कोशिश करेंगे कि आपको यह त्रुटि क्यों हो रही है।


0

मेरे पास एक ही मुद्दा था लेकिन एक्सप्रेस और अपोलो-सर्वर के साथ। यहाँ से समाधान :

एकमात्र विशेष विचार जिसे बनाने की आवश्यकता है, वह उस सर्वर को पोर्ट को चुनने की अनुमति देने के लिए है जिसे सर्वर पर तैनात किया गया है। अन्यथा, त्रुटियाँ हो सकती हैं, जैसे अनुरोध टाइमआउट।

अपोलो-सर्वर को रनोकू में हरोकू द्वारा परिभाषित पोर्ट का उपयोग करने के लिए कॉन्फ़िगर करने के लिए, आपकी सेटअप फ़ाइल में सुनने का कार्य पोर्ट पर्यावरण चर द्वारा परिभाषित पोर्ट के साथ कहा जा सकता है:

> server.listen({ port: process.env.PORT || 4000 }).then(({ url }) => { 
> console.log(`Server ready at ${url}`); });

0

मेरे मामले में मेरे दो मुद्दे थे ...

1) किसी अन्य प्रविष्टि फ़ाइल से ऐप चलाने के कारण कोई श्रोता नहीं है और इस रन स्क्रिप्ट को package.json "स्क्रिप्ट" से हटा दिया गया था

यहां छवि विवरण दर्ज करें

2) 'सीक्वल' के बजाय 'सीक्वल' के साथ केस संवेदनशील समस्या

यहां छवि विवरण दर्ज करें


0

I Use ReactJs, अगर आप Heroku पर अपलोड करना चाहते हैं तो इसे अपने webpack.config.js में जोड़ें

क्योंकि न जोड़ने पर आपसे त्रुटि होगी

त्रुटि R10 (बूट टाइमआउट) -> लॉन्च के 60 सेकंड के भीतर वेब प्रक्रिया $ PORT को बांधने में विफल रही

//webpack.config.js add code like that

const HtmlWebPackPlugin = require(“html-webpack-plugin”);
const MiniCssExtractPlugin = require(“mini-css-extract-plugin”);
var server_port = process.env.YOUR_PORT || process.env.PORT || 5000;
var server_host = process.env.YOUR_HOST || 0.0.0.0’;

module.exports = {
 module: {
 rules: [
 {
 test: /\.js$/,
 exclude: /node_modules/,
 use: {
 loader: babel-loader
 }
 },
 {
 test: /\.css$/,
 use: [MiniCssExtractPlugin.loader, css-loader”]
 }
 ]
 },
 devServer: {
 disableHostCheck: true,
 contentBase: ‘./dist’,
 compress: true,
 inline: true,
 port:server_port,
 host:server_host

},
 plugins: [
 new HtmlWebPackPlugin({
 template: “./src/index.html”,
 filename: index.html
 }),
 new MiniCssExtractPlugin({
 filename: “[name].css”,
 chunkFilename: “[id].css
 })
 ]
};

0

मेरे मामले में, न तो बंदरगाह और न ही मेजबान समस्या थी। index.js2 फाइलों में विभाजित किया गया था। server.js:

//server.js
const express = require('express')
const path = require('path')

const app = express()

app.use(express.static(path.resolve(__dirname, 'public')));
// and all the other stuff
module.exports = app

//app.js
const app = require('./server');
const port = process.env.PORT || 3000;
app.listen(port, '0.0.0.0', () => {
    console.log('Server is running s on port: ' + port)
});

से package.jsonहम भाग गया node app.js

जाहिर है कि यह समस्या थी। एक बार जब मैंने दोनों को एक फाइल में जोड़ लिया, तो उम्मीद के मुताबिक तैनात हरोकू ऐप।


0

मेरी समस्या यह थी कि हरको को तैनात करने के दौरान मुझे एक त्रुटि मिली:

लॉन्च के 60 सेकंड के भीतर वेब प्रक्रिया $ PORT को बांधने में विफल रही

जब heroku logs --tailटर्मिनल में चल रहा हो । लेकिन जब मैं स्थानीय रूप से सर्वर चलाऊंगा तो एप्लिकेशन अपेक्षित रूप से चलेगा।

मेरी index.jsफ़ाइल (सर्वर फ़ाइल) में यह था

const PORT = process.env.port || 4000

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`)
})

लेकिन यह होना चाहिए था

const PORT = process.env.PORT || 4000

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`)
})

उपयोग करें process.env.PORT, नहीं process.env.port, क्योंकि स्पष्ट portरूप PORTसे समान नहीं है ।

श्रेय उपासक को


0

मुझे एहसास हुआ कि मुझे अनुरोध समापन बिंदु में पोर्ट नंबर की आवश्यकता नहीं है, इसलिए समापन बिंदु था herokuapp.comऔर नहीं herokuapp.com:5000

listen()कॉल मेजबान और कॉलबैक के बिना हो सकता है:

server.listen(5000);

यदि आप डिफ़ॉल्ट पोर्ट का उपयोग करते हैं तो आपको URL में पोर्ट नंबर की आवश्यकता नहीं है। तो यह समस्या का समाधान कैसे करता है?
राल्फफ्राइडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.