web-dev-qa-db-ja.com

Heroku + node.jsエラー(Webプロセスは起動後60秒以内に$ PORTにバインドできませんでした)

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

何か案が ?

369
user428900

Herokuはアプリに動的にポートを割り当てます。そのため、ポートを固定番号に設定することはできません。 Herokuはポートを環境に追加するので、そこから引っ張ることができます。これを聞いてみましょう:

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

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

HerokuのドキュメントはNode.js here にあります。

829
redhotvengeance

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'));
});
24
vinesh

このエラーは、Heroku がポートまたはホスト名 at 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);
});
23
Royce Lee

あなたのコードがポートを指定していない場合、webプロセスではなく おそらくworkerプロセスであるべきです。

それで、あなたのProcfileを(あなたの特定のコマンドが記入された)readに変更してください:

worker: YOUR_COMMAND

その後、CLIでも実行します。

$ heroku scale worker=1

19
zthomas.nc

ポートとホストの両方を通過させている人たちにとって、Herokulocalhostに束縛されないことを覚えておいてください。

必ず渡す必要がありますHostの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

14
gregb

私の場合、 https://hapijs.com/ /の例を使用していました

私が交換した問題を解決するために

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

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

私は同じ問題を抱えていて、リスニングポートを3000から(process.env.PORT || 5000)に変更して問題を解決しました。

2
Akshata Dabade

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

2
Edgar Ortega

すべての解決策の中で私は期待どおりに誰も仕事を試みなかった、私はデフォルトでherokuを勉強します。

APP_PORT =などの名前の変更をキャンセルする代わりに、envファイルでPORT =を使用してください。

1
Delino

以下のステップは私の解決策を解決しました:

package.json asを編集します。

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

および Server.js as:

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

Heroku bashプロセスから、yargsのようなオプションパーサーを使って$ PORTの値をあなたのノードアプリに渡します。

これがどうやってできるかの例です。スクリプトオブジェクトのpackage.json内に、startメソッド "node server --port $ PORT"を追加します。

サーバーファイルで、startメソッドのportオプション(--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
Aori Nevo

Procfileを定義しなかったので、同じ問題がありました。ファイル拡張子を付けずにProcfileという名前のアプリケーションのルートディレクトリにテキストファイルをコミットします。このファイルは、Herokuにアプリを起動するために実行するコマンドを指示します。
web: node app.js

0
AmirRezaM75
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”
 })
 ]
};
0
NUR CHULIS

私の場合、2つの問題がありました。

1)別のエントリファイルからアプリを実行しているためリスナーがまったくなく、この実行スクリプトがpackage.jsonの "scripts"から削除されました

enter image description here 

2) 'sequelize'ではなく 'Sequelize'の大文字と小文字を区別する問題

enter image description here 

0
Paul Elmatsidis

私と同様に、デプロイ時にpackage.jsonファイルからスクリプトを実行するようにHerokuを設定している場合は、そのスクリプトのPORTの値をハードコードしていないことを確認してください。あなたがそうするならば、あなたは私のようになって、なぜあなたがこのエラーを受けているのかを突き止めようとして1時間を費やすでしょう。

0
Chris

私は同じ問題を抱えていましたが、エクスプレスとアポロサーバーに関してでした。 からの解決策

行う必要がある唯一の特別な考慮事項は、herokuがサーバーのデプロイ先のポートを選択できるようにすることです。そうでなければ、要求タイムアウトなどのエラーが発生する可能性があります。

実行時にHerokuによって定義されたポートを使用するようにapollo-serverを設定するには、PORT環境変数によって定義されたポートを使用して、セットアップファイルのlisten関数を呼び出すことができます。

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

「localhost」を「0.0.0.0」のIPに置き換えることで問題を解決できたのと同じ問題がありました

0
Damith Asanka

Portに固定数を設定することはできません、herokuはprocess.env.PORTを使って動的にそれを割り当てます。しかし、この両方のprocess.env.PORT || 5000を追加することができます。 Herokuは最初のものを使用し、あなたのローカルホストは2番目のものを使用します。

あなたもあなたのコールバック機能を追加することができます。以下のコードを見てください

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