596

私は最初のnode.jsアプリを持っています(ローカルで正常に動作します)-しかし、heroku経由でデプロイできません(初めてherokuでも)。コードは以下です。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/');

何か案が ?

4

36 に答える 36

1276

Heroku はアプリにポートを動的に割り当てるため、ポートを固定番号に設定することはできません。Heroku はポートを env に追加するので、そこからプルできます。これに耳を傾けます:

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

そうすれば、ローカルでテストするときに引き続きポート 5000 をリッスンしますが、Heroku でも動作します。

ここで、Node.js に関する Heroku ドキュメントを確認できます。

于 2013-03-28T22:36:48.270 に答える
55

このエラーは、Herokuが でポートまたはホスト名をバインドできなかったときに発生しserver.listen(port, [host], [backlog], [callback])ます。

Heroku が必要とするのは.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);
});
于 2014-08-21T05:35:27.783 に答える
29

Yeoman の angular-fullstack 生成プロジェクトを使用しているときに同じ問題が発生し、IP パラメータを削除するとうまくいきました。

このコードを置き換えました

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'));
});
于 2015-08-02T20:06:06.073 に答える
3

リクエストエンドポイントにポート番号は必要ないことに気付いたので、エンドポイントは であり ではherokuapp.comありませんでしherokuapp.com:5000た。

呼び出しは、listen()ホストとコールバックなしで行うことができます:

server.listen(5000);
于 2019-10-07T17:56:37.363 に答える
3

私の場合、babel-plugin-transform-inline-environment-variablesプラグインで Babel を使用していました。どうやら、Heroku はデプロイ時に PORT 環境変数を設定しないため、process.env.PORTに置き換えられundefined、コードは Heroku が何も知らない開発ポートにフォールバックします。

于 2016-11-24T05:34:32.733 に答える
2

I Use ReactJs, If you want upload to heroku add this in your webpack.config.js

Because if not add you will have error

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

//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"
    })
  ]
};
于 2019-06-24T11:05:13.770 に答える
1

根本的な原因を見つけるために何時間も費やしましたが、最終的に、このタイムアウト (60 秒) を調整できることがわかりました。ここで、60 秒を 120 秒またはそれ以上に変更できます。それは私のために働きます、他の誰かを助けることを願っています!

于 2021-02-14T11:05:52.337 に答える
0

このエラーが発生し、上記が機能しない場合、エラーは R10 自体に起因するものではありません。エラーは R14 (メモリ クォータの超過) が原因であり、これはコードの一部で multer (multer.diskStorage()) が使用されているためです。メソッド) または何らかの形式のローカル ストレージを使用して画像やその他のファイルを保存するためのその他のライブラリ。エラー R14 による遅延は、R10 (ブート タイムアウト) エラーにつながります。

解決:

package.json ファイルで、start を "start" : "node --max-old-space-size=4096 server/index.js" に変更します。これにより、ストレージ サイズが増加します。

また

このheroku変数を設定 heroku canfig:set NODE_ENV=dev

于 2021-09-26T21:43:24.553 に答える
0

私のように、デプロイ時にファイルからスクリプトを実行するように Heroku を構成している場合は、そのスクリプトにpackage.jsonの値をハードコーディングしていないことを確認してください。PORTもしそうなら、あなたは私のようになってしまい、なぜこのエラーが発生したのかを理解しようとして1時間費やすことになります.

于 2018-05-13T16:49:12.683 に答える