【问题标题】:Heroku fails at Start Script, but I have a standard start script in my package.jsonHeroku 在启动脚本中失败,但我的 package.json 中有一个标准启动脚本
【发布时间】:2021-03-05 18:08:31
【问题描述】:

我正在将 MERN 堆栈应用程序部署到 Heroku。在本地运行时,我的项目运行良好,但是当我尝试从 Heroku 运行我的应用程序时遇到以下错误。

2020-11-23T01:08:02.199575+00:00 app[web.1]: npm 错误!在 mernshoppinglist@1.0.0 启动脚本失败。

这是我尝试加载应用程序时 Heroku 的完整日志

2020-11-23T01:08:02.199331+00:00 app[web.1]: npm ERR! 
2020-11-23T01:08:02.199575+00:00 app[web.1]: npm ERR! Failed at the mernshoppinglist@1.0.0 start script.
2020-11-23T01:08:02.199766+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2020-11-23T01:08:02.875811+00:00 app[web.1]: 
2020-11-23T01:08:02.876018+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2020-11-23T01:08:02.876125+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2020-11-23T01_08_02_200Z-debug.log
2020-11-23T01:08:02.935584+00:00 heroku[web.1]: Process exited with status 1
2020-11-23T01:08:02.975882+00:00 heroku[web.1]: State changed from starting to crashed
2020-11-23T01:08:03.765808+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=reke-mern-shopping-list.herokuapp.com request_id=0992d8aa-8716-407f-a59e-df58e9e39a54 fwd="208.102.105.218" dyno= connect= service= status=503 bytes= protocol=https
2020-11-23T01:08:04.134057+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=reke-mern-shopping-list.herokuapp.com request_id=ba4d4159-75c3-458c-b3f1-cc1168ac4ca7 fwd="208.102.105.218" dyno= connect= service= status=503 bytes= protocol=https

当我研究这个错误时,建议我在我的 package.json 中添加一个启动脚本。但是,我的 package.json 中确实有这个。我很好奇是否有人知道解决方案,或者同样重要的是,我应该采取哪些步骤来解决这个问题。 Heroku 部署对我来说是一场真正的斗争。您可以在下面看到完整的文件

{
  "name": "mernshoppinglist",
  "version": "1.0.0",
  "description": "Shopping list with with the MERN stack and JWT",
  "main": "server.js",
  "scripts": {
    "client-install": "npm install --prefix client",
    "start": "node server.js",
    "server": "nodemon server.js",
    "client": "npm start --prefix client",
    "dev": "concurrently \"npm run server\" \"npm run client\"",
    "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build --prefix client"
  },
  "author": "David REke",
  "license": "MIT",
  "dependencies": {
    "bcryptjs": "^2.4.3",
    "concurrently": "^5.3.0",
    "config": "^3.3.2",
    "express": "^4.17.1",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.10.10"
  }
}

我正在跟随一个教程,我可以说我已经匹配了作者的规定。我不确定它是否需要,但下面也是我的 server.js 文件。

const express = require('express');
const mongoose = require('mongoose');
const app = express();
const path = require('path');
const config = require('config')

// Bodyparser Middleware
app.use(express.json());

// DB Config
const db = config.get('mongoURI');

// connect to MongoDB

mongoose.connect(db, {useNewUrlParser: true,
    useCreateIndex: true})
    .then(() => {
        console.log('mongoDB Connected...')
    })
    .catch((err) => {
        console.log(err)
    });

    

// use Route
app.use('/api/items', require('./routes/api/items'));
app.use('/api/users', require('./routes/api/users'));
app.use('/api/auth', require('./routes/api/auth'))

// added code from youtube comments
var distDir = __dirname + "/dist/";
app.use(express.static(distDir));

// Server static assets if in production
if(process.env.NODE_ENV === 'production') {
    // set static folder
    app.use(express.static('client/build'))

    app.get('*', (req,res) => {
        res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    } )
}

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


 app.listen(port, () => console.log(`server started on port ${port}`))

编辑:我应该补充一点,我没有 procfile,但我的理解是我不需要一个,因为我的 package.json 中有一个启动脚本。

编辑 2:当我实施 chmsv 的修复时,我在日志中收到以下错误:

2020-11-24T13:45:26.235249+00:00 app[worker.1]:     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
2020-11-24T13:45:26.235249+00:00 app[worker.1]:     at Module.load (internal/modules/cjs/loader.js:879:32)
2020-11-24T13:45:26.235250+00:00 app[worker.1]:     at Function.Module._load (internal/modules/cjs/loader.js:724:14)
2020-11-24T13:45:26.235250+00:00 app[worker.1]:     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
2020-11-24T13:45:26.235251+00:00 app[worker.1]:     at internal/main/run_main_module.js:17:47 {
2020-11-24T13:45:26.235251+00:00 app[worker.1]:   code: 'MODULE_NOT_FOUND',
2020-11-24T13:45:26.235251+00:00 app[worker.1]:   requireStack: [ '/app/server.js' ]
2020-11-24T13:45:26.235252+00:00 app[worker.1]: }
2020-11-24T13:45:26.307299+00:00 heroku[worker.1]: Process exited with status 1
2020-11-24T13:45:26.357136+00:00 heroku[worker.1]: State changed from up to crashed

【问题讨论】:

  • 当你打开/app/.npm/_logs/2020-11-23T01_08_02_200Z-debug.log,有没有更多的细节?
  • 如果你像concurrently \"npm run server\" \"npm run client\" 那样做start 应该这样做,因为你现在只用node server 启动你的服务器,你也需要客户端
  • 那个edit2说“/app/server.js”没有文件——你需要找出/app被应用到路径的位置,因为server.js可能在你的根目录中目录。您也可以将 server.js 移动到一个名为“app”的文件夹中,但它可能会弄乱您的所有其他路径

标签: node.js express heroku


【解决方案1】:

部署后,Heroku 将在你的 package.json 中运行命令 "start": "node server.js"。但无论如何,Heroku 也需要 Procfile。

  1. 创建 Procfile 并添加 worker: node server.js。如果您使用 Github 进行部署,请不要忘记推送更改。
  2. 在 dashboard.heroku.com 上打开您的应用程序。在 Resources 中,将 Dyno 类型从 web 更改为 worker。
  3. 在设置中检查 Buildpacks(必须是 heroku/nodejs)。

【讨论】:

  • 我刚刚实施了这些更改并收到了一组新的错误,我会将它们放入 OP 中。
  • @DavidReke 检查一次 heroku 采用的文件路径是否正确。您是否能够成功地在本地构建和运行您的应用程序?你在运行之前做了 npm install 吗?乍一看,它表明它找不到节点模块。检查是否已创建 node_modules 文件夹。然后重启服务器。
  • 抱歉回复晚了,我可以运行“npm run dev”并让应用程序在本地运行。但是当我运行“heroku local”时,我得到了同样的错误“无法获取/”
【解决方案2】:

事实证明,我的问题归结为两个不同的文件和相对文件路径,其中我没有匹配的大小写。但是,对我造成问题的部分原因是我不知道如何正确检索正确的日志。这个 youtube 视频对我帮助很大:

https://www.youtube.com/watch?v=U350rWtxGwg&t=1075s

【讨论】:

    【解决方案3】:

    所有这些代码都是完全正确的。我遇到了同样的问题,问题是我在创建集群时选择了添加当前 IP 地址。

    因此,就我而言,在我的 MongoDB 集群中的任意位置更改 网络访问 表单即可解决问题。

    另外,不要忘记点击重新启动所有测功机

    【讨论】:

      猜你喜欢
      • 2019-09-02
      • 2020-12-04
      • 2019-07-10
      • 1970-01-01
      • 2018-04-29
      • 2019-06-07
      • 2020-08-29
      • 2016-08-15
      • 2019-07-17
      相关资源
      最近更新 更多