হেরোকু + নোড.জেএস ত্রুটি (ওয়েব প্রক্রিয়া প্রবর্তনের 60 সেকেন্ডের মধ্যে $ PORT এ আবদ্ধ হতে ব্যর্থ হয়েছে)


447

আমার প্রথম নোড.জেএস অ্যাপ রয়েছে (স্থানীয়ভাবে ভাল চলছে) - তবে আমি এটি হিরকু (প্রথমবারের মতো ডাব্লু / হিরকু) এর মাধ্যমে স্থাপন করতে পারছি না। কোডটি নীচে রয়েছে। সুতরাং আমাকে এত কোড লিখতে দেয় না, তাই আমি কেবলই বলব যে আমার নেটওয়ার্কের মধ্যে স্থানীয়ভাবে কোড চালানো কোনও সমস্যা দেখায় না।

 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/');

কোন ধারণা ?


আপনি কি এখানে আপনার কোড পোস্ট করতে পারেন? আপনি কোনও HTTP সার্ভার শুরু করতে পারলে সাধারণত। (অংশ) ভাগ করুন
বেনজামিন গ্রুয়েনবাউম

উত্তর:


989

হিরোকু গতিশীলভাবে আপনার অ্যাপ্লিকেশনটিকে একটি বন্দর নির্ধারণ করে, তাই আপনি কোনও নির্দিষ্ট সংখ্যায় পোর্টটি সেট করতে পারবেন না। হেরোকু বন্দরটিকে এনভির সাথে যুক্ত করে, তাই আপনি এটি সেখান থেকে টানতে পারেন। আপনার শ্রবণটি এটিতে স্যুইচ করুন:

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

আপনি স্থানীয়ভাবে পরীক্ষা করার পরে এটি 5000 পোর্টটি এখনও শুনতে পাবে, তবে এটি হেরোকুতেও কাজ করবে।

আপনি নোড.জেএসে হিরোকু ডক্সটি এখানে পরীক্ষা করতে পারেন ।


97
গুরুত্বপূর্ণ যে আপনি প্রক্রিয়া.এনভি.পোর্ট ব্যবহার করুন এবং প্রক্রিয়া.এনভি.পোর্ট ব্যবহার করবেন না।
gprasant

সুন্দর! আমার জন্য 'ওয়েবসকেট' মডিউলটি নিয়ে কাজ করেছে।
ফিল্স_এক্স

2
এখানে একটি উদাহরণ রয়েছে: github.com/heroku/node-js-getting-st সূত্র
পাবলো

2
ধন্যবাদ, আমার জন্যও কাজ করেছেন। আমি আশ্চর্য হয়েছি যে
হিরোকু ডক্সে

@ রেডটিভেঞ্জেন্স আপনাকে ধন্যবাদ .. এটি মামলার সংবেদনশীলতার কথা উল্লেখ করুন এবং দিনটি সংরক্ষণ করুন :)
মাহেন্দ্রন

34

ত্রুটিটি ঘটে যখন হেরোকু পোর্ট বা হোস্টনামটি বাঁধতে ব্যর্থ হয় 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 (serverPort, "স্থানীয় হোস্ট", ফাংশন (মাত্রই ভুল করে) {Heroku ব্যর্থ হয়েছিল "0.0.0.0" সাহায্য স্যুইচ করা "স্থানীয় হোস্ট"
pubsy

31

এটি উল্লেখযোগ্য যে আপনার কোডটি যদি কোনও বন্দর নির্দিষ্ট করে না, তবে এটি কোনও webপ্রক্রিয়া হওয়া উচিত নয় এবং এর workerপরিবর্তে সম্ভবত একটি প্রক্রিয়া হওয়া উচিত ।

সুতরাং, আপনার Procfileপড়ার পরিবর্তন করুন (আপনার নির্দিষ্ট কমান্ডটি পূরণ করা সহ):

worker: YOUR_COMMAND

এবং তারপরে সিএলআইতেও চালান:

heroku scale worker=1

1
আমার একই সমস্যা ছিল আমি
আইপি'র

2
আমি হিরোকুতে একটি ডিসকর্ড বট চালাচ্ছি এবং এটি আমাকে লুপের জন্য ফেলেছে। স্ল্যাক, হিপচ্যাট ইত্যাদি বটগুলিতে সম্ভবত একই সমস্যা হতে পারে।
স্কাইলার

1
আপনি যদি এই রুটে যান তবে রিসোর্সগুলি ট্যাবে যাওয়ার বিষয়টি নিশ্চিত করুন, ওয়েব প্রক্রিয়াটি বন্ধ করুন এবং কর্মী প্রক্রিয়াটি চালু করুন। এইভাবে হিরোকু কোনও পোর্ট বাঁধাইয়ের আশা করবে না।
আইজাক লাইম্যান

1
ওহ আপনাকে অনেক ধন্যবাদ আমি এটিকে দেখার চেষ্টা করে বাদাম গেলাম। প্রোকফিলের ক্ষেত্রে আমার কোনও ধারণা নেই ওয়েব এবং কর্মী অ্যাপ্লিকেশন হেরোকুতে ভিন্ন fe এটি উল্লেখ করার মতো যে তারা startআমারpackage.json
isষভ

1
আমার ক্ষেত্রে আমি প্রোফিলটি ওয়েব থেকে কর্মী হিসাবে পরিবর্তন করেছি। এটা কাজ করেছে!! থ্যাঙ্কস
রডরিগর্ফ

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
এই উত্তরটি কেবলমাত্র সম্পূর্ণই নয়, কেবলমাত্র দুটি সম্ভাব্য সমস্যা লক্ষ্য করে। আমার ক্ষেত্রে বন্দরের কনফিগারেশনটি সঠিক ছিল, তবে শ্রোতার ঠিকানা নয়। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
Danielo515

আমার ক্ষেত্রে এটি নীচের মতো পরিবর্তন 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
ডোমিনিক

3

(process.env.PORT || 5000)সমস্যাটি সমাধানের জন্য আমার শ্রুত পোর্টটি 3000 থেকে পরিবর্তন করা হচ্ছে ।


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এবং কোনও ফাইল এক্সটেনশান ছাড়াই is এই ফাইলটি হিরোকুকে আপনার অ্যাপ্লিকেশন শুরু করতে কোন আদেশ (গুলি) চালাবে তা বলে।

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

সমস্ত সমাধানের মধ্যে আমি প্রত্যাশার মতো কোনও কাজ করার চেষ্টা করি নি, আমি ডিফল্টরূপে হেরকু অধ্যয়ন করি en

আপনার env ফাইলে কোনও নাম বদলানো যেমন APP_PORT = এর পরিবর্তে PORT = ব্যবহার করুন।


0

হিরকু বাশ প্রক্রিয়া থেকে, ইয়ার্সের মতো বিকল্প পার্সার ব্যবহার করে আপনার নোড অ্যাপ্লিকেশনটিতে $ PORT এর মানটি নামিয়ে দিন।

আপনি কীভাবে এটি করতে পারেন তার একটি উদাহরণ এখানে। স্ক্রিপ্টস অবজেক্টে, প্যাকেজ.জসনের অভ্যন্তরে, একটি প্রারম্ভ পদ্ধতি "নোড সার্ভার - পোর্ট OR পোর্ট" যুক্ত করুন।

আপনার সার্ভার ফাইলে, শুরুর পদ্ধতির পোর্ট বিকল্প (--port $ PORT) থেকে মান পেতে yargs ব্যবহার করুন:

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ফাইল থেকে একটি স্ক্রিপ্ট চালনার জন্য মোতায়েনের জন্য কনফিগার করছেন , নিশ্চিত PORTহন যে আপনি সেই স্ক্রিপ্টের মান হার্ড-কোডড করেন নি ! যদি আপনি তা করেন তবে আপনি আমার মতো শেষ হয়ে যাবেন এবং আপনি কেন এই ত্রুটিটি পাচ্ছেন তা জানার চেষ্টা করে এক ঘন্টা ব্যয় করবেন।


0

আমার একই সমস্যা ছিল তবে এক্সপ্রেস এবং অ্যাপোলো-সার্ভার নিয়ে। এখান থেকে সমাধান :

একমাত্র বিশেষ বিবেচনা যা করা দরকার তা হিরাকুকে সার্ভারের দ্বারা বন্দরিত পোর্টটি বেছে নেওয়ার অনুমতি দেওয়া। অন্যথায়, ত্রুটি থাকতে পারে যেমন একটি অনুরোধের সময়সীমা শেষ।

রানটাইমের সময় হেরোকু দ্বারা সংজ্ঞায়িত একটি বন্দর ব্যবহার করতে অ্যাপোলো-সার্ভারটি কনফিগার করতে আপনার সেটআপ ফাইলে শোনার ফাংশনটি পোর্ট পরিবেশের ভেরিয়েবল দ্বারা নির্ধারিত পোর্টের সাথে কল করা যেতে পারে:

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

0

আমার ক্ষেত্রে আমার দুটি সমস্যা ছিল ...

1) অন্য কোনও এন্ট্রি ফাইল থেকে অ্যাপটি চলমান থাকায় কোনও শ্রোতা মোটেও তাড়াতাড়ি নেই এবং এই রান স্ক্রিপ্টটি প্যাকেজটি থেকে মুছে ফেলা হয়েছে। জেসন "স্ক্রিপ্টস"

এখানে চিত্র বর্ণনা লিখুন

২) 'সিক্যুয়ালাইজ' এর পরিবর্তে 'সিক্যুইলাইজ' এর ক্ষেত্রে সংবেদনশীল সমস্যা

এখানে চিত্র বর্ণনা লিখুন


0

আমি রিঅ্যাকটিজে ব্যবহার করি, আপনি যদি হিরকুতে আপলোড করতে চান তবে এটি আপনার ওয়েবপ্যাক.কনফিগ.জেজে যোগ করুন

কারণ যুক্ত না করলে আপনার ত্রুটি হবে

ত্রুটি আর 10 (বুট টাইমআউট) -> ওয়েব প্রক্রিয়া প্রবর্তনের 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 সেকেন্ডের মধ্যে OR 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

Gprasant to


0

আমি বুঝতে পেরেছিলাম যে অনুরোধের শেষ পয়েন্টে আমার পোর্ট নম্বর লাগবে না, তাই শেষ পয়েন্টটি ছিল herokuapp.comএবং না herokuapp.com:5000

listen()কল হোস্ট এবং কলব্যাক ছাড়া হতে পারে:

server.listen(5000);

আপনি যদি ডিফল্ট পোর্ট ব্যবহার করেন তবে ইউআরএলটিতে আপনার পোর্ট নম্বর লাগবে না। সুতরাং কিভাবে যে সমস্যার সমাধান করে?
রালফ্রেডল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.