私は最初の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/');
何か案が ?
Herokuはアプリに動的にポートを割り当てます。そのため、ポートを固定番号に設定することはできません。 Herokuはポートを環境に追加するので、そこから引っ張ることができます。これを聞いてみましょう:
.listen(process.env.PORT || 5000)
そうすれば、ローカルでテストしてもポート5000をリッスンしますが、Herokuでも動作します。
HerokuのドキュメントはNode.js here にあります。
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'));
});
このエラーは、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);
});
あなたのコードがポートを指定していない場合、 はweb
プロセスではなく おそらくworker
プロセスであるべきです。
それで、あなたのProcfile
を(あなたの特定のコマンドが記入された)readに変更してください:
worker: YOUR_COMMAND
その後、CLIでも実行します。
$ heroku scale worker=1
ポートとホストの両方を通過させている人たちにとって、Heroku は localhost
に束縛されないことを覚えておいてください。
必ず渡す必要があります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
私の場合、 https://hapijs.com/ /の例を使用していました
私が交換した問題を解決するために
server.connection({
Host: 'localhost',
port: 8000
});
と
server.connection({
port: process.env.PORT || 3000
});
私は同じ問題を抱えていて、リスニングポートを3000から(process.env.PORT || 5000)に変更して問題を解決しました。
私の場合は、Babelを babel-plugin-transform-inline-environment-variables pluginと一緒に使用していました。どうやら、Herokuはデプロイ時にPORT env変数を設定しないので、process.env.PORT
はundefined
に置き換えられ、あなたのコードはHerokuが何も知らない開発用ポートにフォールバックします。
すべての解決策の中で私は期待どおりに誰も仕事を試みなかった、私はデフォルトでherokuを勉強します。
APP_PORT =などの名前の変更をキャンセルする代わりに、envファイルでPORT =を使用してください。
以下のステップは私の解決策を解決しました:
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");
});
...
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の動的に設定された値にバインドします。
Procfileを定義しなかったので、同じ問題がありました。ファイル拡張子を付けずにProcfileという名前のアプリケーションのルートディレクトリにテキストファイルをコミットします。このファイルは、Herokuにアプリを起動するために実行するコマンドを指示します。web: node app.js
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”
})
]
};
私と同様に、デプロイ時にpackage.json
ファイルからスクリプトを実行するようにHerokuを設定している場合は、そのスクリプトのPORT
の値をハードコードしていないことを確認してください。あなたがそうするならば、あなたは私のようになって、なぜあなたがこのエラーを受けているのかを突き止めようとして1時間を費やすでしょう。
私は同じ問題を抱えていましたが、エクスプレスとアポロサーバーに関してでした。 からの解決策 :
行う必要がある唯一の特別な考慮事項は、herokuがサーバーのデプロイ先のポートを選択できるようにすることです。そうでなければ、要求タイムアウトなどのエラーが発生する可能性があります。
実行時にHerokuによって定義されたポートを使用するようにapollo-serverを設定するには、PORT環境変数によって定義されたポートを使用して、セットアップファイルのlisten関数を呼び出すことができます。
> server.listen({ port: process.env.PORT || 4000 }).then(({ url }) => {
> console.log(`Server ready at ${url}`); });
「localhost」を「0.0.0.0」のIPに置き換えることで問題を解決できたのと同じ問題がありました
Portに固定数を設定することはできません、herokuはprocess.env.PORT
を使って動的にそれを割り当てます。しかし、この両方のprocess.env.PORT || 5000
を追加することができます。 Herokuは最初のものを使用し、あなたのローカルホストは2番目のものを使用します。
あなたもあなたのコールバック機能を追加することができます。以下のコードを見てください
app.listen(process.env.PORT || 5000, function() {
console.log("Server started.......");
});