在heroku上部署后无法读取mongo数据库,返回503错误,但它在本地工作
Posted
技术标签:
【中文标题】在heroku上部署后无法读取mongo数据库,返回503错误,但它在本地工作【英文标题】:Can't read mongo database after deployment on heroku, returns 503 error, but it works locally 【发布时间】:2019-11-10 14:14:35 【问题描述】:在我的 server.js 上执行 npm run build 并修复路径错误后,它在 localhost 中运行良好。但是一旦我将它部署到 Heroku,数据就不会收费,并且最终会在 chrome 控制台中显示这些消息:
加载资源失败:服务器响应状态为 503(服务不可用)
这之后是另一个错误:
Uncaught (in promise) SyntaxError: Unexpected token
我猜第一个错误与路由有关,因为它试图获取数据并且服务器响应是 503,我猜第二个错误仍然与我的 server.js 文件上静态文件的使用路径有关.
代码可在此处获得:https://github.com/pepdbm7/Meetup-with-Vue
我已经为第一个错误尝试的是:更改客户端的路由(添加 herokuapp url 作为每个 fetch() 的根 url),以及服务器端路由,但没有帮助。
它像现在一样在本地完美运行,这就是我不明白的。
...对于第二个错误,我将路径更改为:res.sendFile(path.join(__dirname, "client/dist"))
和:app.use(express.static("client/dist"));
,并且我已经尝试过其他方式,但由于无法访问,它根本不起作用到缩小的 js 和 css 文件。
作为附加信息,我在部署时确实控制了 heroku 日志,这是结果日志,我没有看到重大错误,只是警告,也许我在这里遗漏了一些东西:
2019-06-28T15:32:25.610341+00:00 app[api]: Deploy d1938a6e by user pepdbm7@gmail.com
2019-06-28T15:32:25.610341+00:00 app[api]: Release v17 created by user pepdbm7@gmail.com
2019-06-28T15:32:26.000000+00:00 app[api]: Build succeeded
2019-06-28T15:32:27.448688+00:00 heroku[web.1]: Restarting
2019-06-28T15:32:27.765993+00:00 heroku[web.1]: State changed from up to starting
2019-06-28T15:32:28.597600+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-06-28T15:32:28.706141+00:00 heroku[web.1]: Process exited with status 143
2019-06-28T15:32:32.750630+00:00 heroku[web.1]: Starting process with command `npm start`
2019-06-28T15:32:34.977483+00:00 app[web.1]:
2019-06-28T15:32:34.977500+00:00 app[web.1]: > meetup_app_vue@1.0.0 start /app
2019-06-28T15:32:34.977501+00:00 app[web.1]: > nodemon server.js
2019-06-28T15:32:34.977502+00:00 app[web.1]:
2019-06-28T15:32:35.398126+00:00 app[web.1]: [33m[nodemon] 1.19.1[39m
2019-06-28T15:32:35.399744+00:00 app[web.1]: [33m[nodemon] to restart at any time, enter `rs`[39m
2019-06-28T15:32:35.400250+00:00 app[web.1]: [33m[nodemon] watching: *.*[39m
2019-06-28T15:32:35.401055+00:00 app[web.1]: [32m[nodemon] starting `node server.js`[39m
2019-06-28T15:32:36.388146+00:00 heroku[web.1]: State changed from starting to up
2019-06-28T15:32:35.987818+00:00 app[web.1]: node environment is production
2019-06-28T15:32:35.993171+00:00 app[web.1]: meetup_app_vue 1.0.0 up and running on port 40353
2019-06-28T15:32:35.994993+00:00 app[web.1]: (node:36) UnhandledPromiseRejectionWarning: MongoParseError: Invalid connection string
2019-06-28T15:32:35.994996+00:00 app[web.1]: at parseConnectionString (/app/node_modules/mongodb-core/lib/uri_parser.js:505:21)
2019-06-28T15:32:35.994998+00:00 app[web.1]: at connect (/app/node_modules/mongodb/lib/operations/mongo_client_ops.js:195:3)
2019-06-28T15:32:35.994999+00:00 app[web.1]: at connectOp (/app/node_modules/mongodb/lib/operations/mongo_client_ops.js:284:3)
2019-06-28T15:32:35.995001+00:00 app[web.1]: at executeOperation (/app/node_modules/mongodb/lib/utils.js:416:24)
2019-06-28T15:32:35.995002+00:00 app[web.1]: at MongoClient.connect (/app/node_modules/mongodb/lib/mongo_client.js:175:10)
2019-06-28T15:32:35.995004+00:00 app[web.1]: at Promise (/app/node_modules/mongoose/lib/connection.js:554:12)
2019-06-28T15:32:35.995006+00:00 app[web.1]: at new Promise (<anonymous>)
2019-06-28T15:32:35.995007+00:00 app[web.1]: at NativeConnection.Connection.openUri (/app/node_modules/mongoose/lib/connection.js:551:19)
2019-06-28T15:32:35.995009+00:00 app[web.1]: at Mongoose.connect (/app/node_modules/mongoose/lib/index.js:289:15)
2019-06-28T15:32:35.995010+00:00 app[web.1]: at Object.<anonymous> (/app/server.js:23:4)
2019-06-28T15:32:35.995012+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:776:30)
2019-06-28T15:32:35.995013+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
2019-06-28T15:32:35.995015+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:653:32)
2019-06-28T15:32:35.995016+00:00 app[web.1]: at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
2019-06-28T15:32:35.995017+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:585:3)
2019-06-28T15:32:35.995019+00:00 app[web.1]: at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
2019-06-28T15:32:35.995111+00:00 app[web.1]: (node:36) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)
2019-06-28T15:32:35.995194+00:00 app[web.1]: (node:36) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
不管它是什么,它必须是一个非常简单的东西,但我已经花了几天时间找到它,所以任何线索都会非常受欢迎!
编辑:正如一些 cmets 所说,我不得不将环境变量放在 heroku 上,我只是错过了或者我没有正确命名。谢谢!!
【问题讨论】:
有几件事:(a) 您可能不应该在生产中使用nodemon
,但这不是您的错误的原因。 (b) 错误消息显示MongoParseError: Invalid connection string
。请edit您的问题并向我们展示您的连接代码。
我假设您的 MongoDB 托管在云中?如上需要查看你的连接代码
另外我假设你已经在 Heroku 上为你的 MongoDB 设置了环境变量?
您在 heroku 设置中的 Config Vars 中的 MONGO_URL 环境变量中似乎缺少连接字符串或连接字符串无效。
它无法与 mongodb 连接,我猜它没有得到正确的 url。您是否在 heroku 上创建/上传了 .env 文件?
【参考方案1】:
正如我所料,它必须是一个简单的解决方案问题,而且确实如此。正如一些 cmets 所说,我只需要在 Heroku Settings 中的 Config Vars 中更新环境变量!现在工作正常!!
非常感谢!
【讨论】:
以上是关于在heroku上部署后无法读取mongo数据库,返回503错误,但它在本地工作的主要内容,如果未能解决你的问题,请参考以下文章
应用程序在本地连接到mongo,但是在heroku上部署时似乎会话创建失败
使用 Mongo Cloud 从部署在 Heroku 上的 Strapi 获取数据到 ReactJs
Socket.io 在 localhost 上工作,但在部署 heroku 后无法工作?