첫 번째 node.js 앱이 있습니다 (로컬에서 잘 실행 됨).하지만 heroku를 통해 배포 할 수 없습니다 (처음으로 / heroku 포함). 코드는 다음과 같습니다. 그래서 너무 많은 코드를 작성할 수 없으므로 네트워크 내에서 로컬로 코드를 실행해도 아무런 문제가 없음을 나타냅니다.
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는 포트를 env에 추가하므로 거기서 끌어 올 수 있습니다. 당신의 말을 들어주세요 :
.listen(process.env.PORT || 5000)
그렇게하면 로컬에서 테스트 할 때 포트 5000을 계속들을 수 있지만 Heroku에서도 작동합니다.
답변
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);
});
답변
코드에서 포트를 지정하지 않으면 프로세스 가 아니web
어야하며 아마도 포트 여야합니다.worker
대신 프로세스 .
따라서 Procfile
특정 명령을 입력하여 읽도록 변경하십시오 .
worker: YOUR_COMMAND
CLI에서 실행하십시오.
heroku scale worker=1
답변
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 가 바인딩되지 않습니다 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
답변
제 경우에는 https://hapijs.com/의 예제를 사용하고있었습니다.
교체 한 문제를 해결하려면
server.connection({
host: 'localhost',
port: 8000
});
와
server.connection({
port: process.env.PORT || 3000
});
답변
청취 포트를 3000에서 변경 (process.env.PORT || 5000)
하여 문제 를 해결했습니다.