650 Stimmen

Heroku + node.js Fehler (Webprozess konnte sich nicht innerhalb von 60 Sekunden nach dem Start an $PORT binden)

Ich habe meine erste node.js app (läuft gut lokal) - aber ich bin nicht in der Lage, es über heroku bereitstellen (zum ersten Mal w / heroku als gut). Der Code ist unten. SO lässt mich nicht so viel Code zu schreiben, so würde ich nur sagen, dass die Ausführung des Codes lokal als auch in meinem Netzwerk zeigt kein Problem.

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

Irgendeine Idee?

3voto

AmirRezaM75 Punkte 810

Ich hatte das gleiche Problem, weil ich nicht definiert hatte Procfile . Übertragen Sie eine Textdatei in das Root-Verzeichnis Ihrer Anwendung, die den Namen Procfile ohne eine Dateierweiterung. Diese Datei teilt Heroku mit, welche(r) Befehl(e) zum Starten Ihrer App ausgeführt werden soll(en).

web: node app.js

3voto

Shai Fisher Punkte 31

Mir wurde klar, dass ich die Portnummer im Anfrageendpunkt nicht benötige, also war der Endpunkt herokuapp.com そして herokuapp.com:5000 .

En listen() Aufruf kann ohne Host und Callback erfolgen:

server.listen(5000);

3voto

NUR CHULIS Punkte 31

Ich verwende ReactJs, Wenn Sie zu heroku hochladen wollen, fügen Sie dies in Ihre webpack.config.js ein

Denn wenn Sie nicht hinzufügen, werden Sie Fehler haben

Fehler R10 (Boot-Zeitüberschreitung) -> Web-Prozess konnte sich nicht an $PORT innerhalb von 60 Sekunden nach dem Start

//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"
    })
  ]
};

3voto

Edgar Ortega Punkte 1580

In meinem Fall habe ich Babel mit dem babel-plugin-transform-inline-environment-variables Plugin. Offenbar setzt Heroku die Umgebungsvariable PORT nicht, wenn eine Bereitstellung erfolgt, so dass process.env.PORT wird ersetzt durch undefined und Ihr Code wird auf den Entwicklungsport zurückgreifen, von dem Heroku nichts weiß.

2voto

Naveen Kumar V Punkte 2173

Editer package.json :

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

und Server.js :

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X