缺少脚本:将应用程序部署到 Heroku 时启动和应用程序崩溃

missing script: start & App crashed when deploying app to Heroku

我是编码新手,但目前正在学习,因为我想在我的 Facebook 页面上创建一个聊天机器人。下面是我在每个 .js 中的脚本以及我之后遇到的错误。输入 heroku open 后,网页显示“应用程序错误 应用程序发生错误,无法提供您的页面。如果您是应用程序所有者,请查看您的日志以了解详细信息。”

希望有人能帮帮我,非常感谢!

index.js

var express = require('express')
var bodyParser = require('body-parser')
var request = require('request')
var app = express()

app.set('port', (process.env.PORT || 5000))

// Process application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({extended: false}))

// Process application/json
app.use(bodyParser.json())

// Index route
app.get('/', function (req, res) {
    res.send('Hello world, I am a chat bot')
})

// for Facebook verification
app.get('/webhook/', function (req, res) {
    if (req.query['hub.verify_token'] === 'my_voice_is_my_password_verify_me') {
        res.send(req.query['hub.challenge'])
    }
    res.send('Error, wrong token')
})

// Spin up the server
app.listen(app.get('port'), function() {
    console.log('running on port', app.get('port'))
})

package.json

{
    "name": "node",
    "version": "1.0.0",
    "description": "facebook chatbot",
    "main": "index.js",
    "scripts": {
        "start": "node index.js"
    },
    "author": "krix",
    "license": "ISC",
    "dependencies": {
        "body-parser": "^1.18.1",
        "express": "^4.15.4",
        "request": "^2.81.0"
    }
}

Procfile.json

web: node index.js

heroku 日志:

2017-09-14T13:32:53.277012+00:00 app[api]: Release v2 created by user network.of.eden@gmail.com
2017-09-14T13:32:53.277012+00:00 app[api]: Enable Logplex by user network.of.eden@gmail.com
2017-09-14T13:32:53.049614+00:00 app[api]: Initial release by user network.of.eden@gmail.com
2017-09-14T13:32:53.049614+00:00 app[api]: Release v1 created by user network.of.eden@gmail.com
2017-09-14T13:33:16.000000+00:00 app[api]: Build started by user network.of.eden@gmail.com
2017-09-14T13:33:44.501803+00:00 app[api]: Release v3 created by user network.of.eden@gmail.com
2017-09-14T13:33:44.550885+00:00 app[api]: Scaled to web@1:Free by user network.of.eden@gmail.com
2017-09-14T13:33:44.501803+00:00 app[api]: Deploy 30d98ae9 by user network.of.eden@gmail.com
2017-09-14T13:33:16.000000+00:00 app[api]: Build succeeded
2017-09-14T13:33:47.445193+00:00 heroku[web.1]: Starting process with command `npm start`
2017-09-14T13:33:51.208413+00:00 app[web.1]: 
2017-09-14T13:33:51.208690+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2017-09-14T13:33:51.208802+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2017-09-14T13_33_51_189Z-debug.log
2017-09-14T13:33:51.186998+00:00 app[web.1]: npm ERR! missing script: start
2017-09-14T13:33:51.326957+00:00 heroku[web.1]: State changed from starting to crashed
2017-09-14T13:33:51.329410+00:00 heroku[web.1]: State changed from crashed to starting
2017-09-14T13:33:51.312231+00:00 heroku[web.1]: Process exited with status 1
2017-09-14T13:33:53.384440+00:00 heroku[web.1]: Starting process with command `npm start`
2017-09-14T13:33:56.553788+00:00 app[web.1]: npm ERR! missing script: start
2017-09-14T13:33:56.567775+00:00 app[web.1]: 
2017-09-14T13:33:56.567944+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2017-09-14T13:33:56.567995+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2017-09-14T13_33_56_555Z-debug.log
2017-09-14T13:33:56.688362+00:00 heroku[web.1]: Process exited with status 1
2017-09-14T13:33:56.703579+00:00 heroku[web.1]: State changed from starting to crashed
2017-09-14T13:34:34.169385+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=boiling-fortress-15768.herokuapp.com request_id=d93942a9-fddf-426c-8604-39aaf8abe6a7 fwd="58.153.46.198" dyno= connect= service= status=503 bytes= protocol=https
2017-09-14T13:34:34.510184+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=boiling-fortress-15768.herokuapp.com request_id=8b2d01d7-56f8-453b-a355-d58c9fd6ca85 fwd="58.153.46.198" dyno= connect= service= status=503 bytes= protocol=https
2017-09-14T13:37:20.203744+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=boiling-fortress-15768.herokuapp.com request_id=884f9ef7-b7f9-4f49-bd57-6b509ec90f6f fwd="58.153.46.198" dyno= connect= service= status=503 bytes= protocol=https
2017-09-14T13:37:20.530728+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=boiling-fortress-15768.herokuapp.com request_id=3ae40dba-5f53-4436-a406-1c45b6bab5af fwd="58.153.46.198" dyno= connect= service= status=503 bytes= protocol=https

我已经尝试阅读了很多其他人在 github 上提出的问题,但我仍然无法解决问题。我从以下网站学习了设置nodejs和heroku服务器的方法:https://chatbotsmagazine.com/have-15-minutes-create-your-own-facebook-messenger-bot-481a7db54892

真心希望有人能帮我解决问题,万分感谢!!

Procfile文件名应该是Procfile,我看你的好像是Procfile.json,可以吗

但是由于您 package.json 有启动脚本,请确保您 git 添加了所有文件并在推送到 Heroku 之前提交了它们

这听起来可能有些重复,但请相信我,事实并非如此。我正在上一门课程,即使不是数千人,也有 100 人有同样的问题。如果您遇到此错误,请查看以下内容。

  1. 在您的 package.json 文件中,确保您在脚本中提到了“start”:“node app.js”以及“许可证下的引擎”。这是我的 package.json 的示例代码现在正在运行:

    {
      "name": "todolist-v1",
      "version": "1.0.0",
      "description": "todolist",
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      },
      "author": "Armaghan",
      "license": "ISC",
      "engines": {
        "node": "14.15.3"
      },
      "dependencies": {
        "body-parser": "^1.19.0",
        "ejs": "^3.1.5",
        "express": "^4.17.1",
        "jquery": "^3.5.1",
        "lodash": "^4.17.20a",
        "mongoose": "^5.11.14",
        "nodemon": "^2.0.7"
      }
    }
    

    为确保您添加了正确版本的节点,请在终端中使用此命令显示您当前的节点版本。 node --version

    1. 请确保您的应用正在侦听正确的端口。

    将 app.listen 代码替换为以下 heroku 应用程序部署代码:

    let port = process.env.PORT;
    if (port == null || port == "") {
      port = 3000;
    }
    
    app.listen(port, function() {
      console.log("Server started succesfully");
    }); 
    
  2. 确保提交正确的 git 分支。我忘记提交了一个不同的(实验性)分支,该分支在 package.json 文件中没有更新的更改。要检查您当前的 git 存储库分支,请使用 git branch

显示分支后,您可以使用 git checkout branchname 在分支之间切换 就我而言,我想提交 master,所以我首先使用 git branch master 进入 master,然后使用 git 将文件实际添加到 git add .(在 space 之后包含点)。 然后使用 git commit -m "your comment"

最后使用以下命令将其再次推送到 Heroku 服务器上。

git push heroku master

推送完成后,在到达 Internet 上的 Web 应用程序地址之前给它几分钟时间总是个好主意,因为它可能需要一些时间来启动和 运行。

  1. 对于某些使用 MongoDB Atlas 的人来说,如果您只允许一个特定的 IP(仅限您的 IP)访问位于 MongoDB Atlas 的数据库集群,部署仍然会失败并且应用程序会崩溃。因此,请尝试将您的 atlas 帐户中的 'Network Access' 设置更改为“允许从任何地方访问”。这将消除 Heroku 错误日志中有时显示的网络访问错误。

亲切的问候,