如何让 Codeship 通过 Heroku 上 nodejs expressjs 部署的 check_url 阶段?

How can I get Codeship to pass the check_url phase of a nodejs expressjs deployment on Heroku?

简而言之,我想: 部署 - https://expressjs.com/en/starter/hello-world.html 通过 Codeship 以及从 Codeship 到 Heroku。

我一直在尝试遵循 https://expressjs.com/en/starter/hello-world.html 中的非常基本的 Hello-World express 教程,然后代码 check_url 阶段 无法通过 Heroku 正确加载 出现以下错误:

    Connecting to intfdsf-dsfdfsdf-323423.herokuapp.com (intfdsf-dsfdfsdf-323423.herokuapp.com)|54.243.89.187|:80... connected.
    HTTP request sent, awaiting response... 503 Service Unavailable
    2016-07-22 02:18:12 ERROR 503: Service Unavailable.

设置命令下,我尝试了以下操作:

    nvm install 0.10
    nvm use 0.10
    npm install

    nvm install 6.3.0
    nvm use 6.3.0
    npm install

两者都以同样的方式失败了。

并添加类似 npm start 的内容会使该行的进程挂起....

我添加了一个带有 web: node server.js 的 Procfile,因此将 app.js 重命名为 server.js 以防万一并获得最佳实践。最后我确实在我的 package.json 中定义了 engines

    {
        "name": "node-ship",
        "version": "1.0.0",
        "description": "",
        "main": "server.js",
        "engines": {
            "node": "5.6.x",
            "npm": "3.10.x"
        },
        "scripts": {
            "start" : "node server.js",
            "test": "echo \"Error: no test specified\" && exit 1"
        },
        "repository": {
            "type": "git",
            "url": "git+https://github.com/slfkjsdlfjklsdkfj/node-ship.git"
        },
        "author": "slfkjsdlfjklsdkfj",
        "license": "ISC",
        "bugs": {
            "url": "https://github.com/slfkjsdlfjklsdkfj/node-ship/issues"
        },
        "homepage": "https://github.com/slfkjsdlfjklsdkfj/node-ship#readme",
        "dependencies": {
            "express": "^4.14.0"
        }
    }

我错过了什么?这样我就可以让 Heroku 正确加载 expressjs,就像我在 运行 node app.js

时在本地加载一样

感谢您的帮助。

这里还有 server.js 文件:

    var express = require('express');
    var app = express();

    app.get('/', function (req, res) {
        res.send('Hello World!');
    });

    app.listen(5000, function () {
        console.log('Example app listening on port 5000!');
    });

Heroku 依赖于端口环境变量的使用。

所以 server.js 文件应该改为:

var port = process.env.PORT || 5000;

app.get('/', function (req, res) {
    res.send('Hello World!');
});

app.listen(port, function () {
    console.log('Example app listening on port '+ port +'!');
});

强调var port = ...部分

然后 Procfile 将用它的 web: node server.js

处理剩下的事情

Codeship 在 Heroku 部署结束时的 check_url 脚本 运行 使用 wget 检查 Heroku 应用程序根 URL 的状态代码。 (如果您想查看不同的 URL,更多选项 link 后面隐藏了一个设置。

只要该页面 returns 状态代码在 2xx 或 3xx 范围内,检查就会成功。

完整脚本请参阅 https://github.com/codeship/scripts/blob/master/utilities/check_url.sh