헤로쿠 mysql - Heroku + node.js 오류 (실행 60 초 이내에 웹 프로세스를 $ PORT에 바인드하지 못했습니다)



8 Answers

yeoman의 각형 풀 스택 생성 프로젝트를 사용하면서 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'));
});
사용기 nodejs git

내 첫 번째 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/');

어떤 생각?




코드에서 포트를 지정하지 않으면 web 프로세스가 아니 어야하며 대신 worker 프로세스 여야합니다.

그래서, Procfile 을 (사용자의 특정 명령을 Procfile 하여) 읽도록 변경하십시오.

worker: YOUR_COMMAND

다음 CLI에서 실행하십시오.

$ heroku scale worker=1




포트와 호스트 모두를 통과하는 사람들은 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 에서 확인할 수 있습니다.




필자는 Babel을 babel-plugin-transform-inline-environment-variables 플러그인과 함께 사용하고있었습니다. 분명히 Heroku는 배포를 수행 할 때 PORT env 변수를 설정하지 않으므로 process.env.PORTundefined 로 바뀌고 코드가 Heroku가 알지 못하는 개발 포트로 폴백 할 것입니다.




모든 솔루션 중 예상대로 아무 작업도하지 않았습니다. heroku는 기본적으로 .env 파일을 조사해야합니다. process.env.PORT, heroku는 PORT를 유지해야합니다. 기본적으로 키워드 포트를 찾습니다.

APP_PORT =와 같은 이름 바꾸기를 취소하려면 env 파일에서 PORT =를 사용하십시오.




고정 된 번호는 포트에 대해 설정할 수 없으며, heroku는 process.env.PORT 사용하여 동적으로 할당합니다. 하지만이 두 process.env.PORT || 5000 추가 할 수 있습니다. process.env.PORT || 5000 이다. Heroku가 첫 번째 것을 사용하고 로컬 호스트가 두 번째 것을 사용합니다.

콜백 기능을 추가 할 수도 있습니다. 아래 코드를 봐라.

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



나처럼 Heroku가 배포시 package.json 파일에서 스크립트를 실행하도록 설정하는 경우 해당 스크립트에서 PORT 의 값을 하드 코딩하지 않았는지 확인하십시오! 그렇게한다면 나처럼 끝날 것이고 왜이 오류가 발생하는지 알아 내려고 한 시간을 보냅니다.




나는 Procfile을 정의하지 않았기 때문에 같은 문제가 발생했습니다. 파일 확장명없이 Procfile이라는 이름의 응용 프로그램 루트 디렉토리에 텍스트 파일을 커밋하십시오. 이 파일은 앱을 시작하기 위해 실행할 명령을 Heroku에 알려줍니다.
web: node app.js




Related