gpt4 book ai didi

mysql - Heroku Node.js 应用程序无法启动

转载 作者:行者123 更新时间:2023-11-29 14:03:33 25 4
gpt4 key购买 nike

我一直在开发我的第一个 Node.js 应用程序(实际上,为了乐趣和练习而将一些旧代码移至 Node),并正在尝试将其托管在 Heroku 上。

我已经能够使用 foreman 在本地顺利运行应用程序,但是每当我将应用程序部署到 Heroku 时,它就会启动,但无法提供查询服务。我做了一些研究,但找不到任何具体内容,但在我看来,Heroku 似乎没有正确安装几个模块

MySQL 数据库托管在 Amazon RDS 中,我已经按照并重新检查了步骤、访问权限和安全异常(exception),似乎没有问题。

我正在使用以下模块,在我的 package.json 中定义:

{
"name": "AppName",
"version": "0.0.1",
"dependencies": {
"express": "2.5.x",
"jade": "0.28.1",
"stylus": "0.32.0",
"mysql": "2.0.0-alpha7",
"string": "1.2.*",
"sanitizer": "0.0.*",
"validator": "0.4.8"
},
"engines": {
"node": "0.8.*",
"npm": "1.*.*"
}
}

在我的应用程序文件的顶部调用:

var express = require('express');
var crypto = require('crypto');
var S = require('string');
var mysql = require('mysql');
var sanitizer = require('sanitizer');
var check = require('validator').check,
sanitize = require('validator').sanitize;

错误信息如下:

TypeError: Cannot call method 'query' of undefined
at pool.getConnection.app.get.connection.query.res.render.global_title (/app/web.js:40:14)
at callbacks (/app/node_modules/express/lib/router/index.js:272:11)
at param (/app/node_modules/express/lib/router/index.js:246:11)
at pass (/app/node_modules/express/lib/router/index.js:253:5)
at Router._dispatch (/app/node_modules/express/lib/router/index.js:280:5)
at Object.middleware [as handle] (/app/node_modules/express/lib/router/index.js:45:10)
at next (/app/node_modules/express/node_modules/connect/lib/http.js:204:15)
at Object.stylus (/app/node_modules/stylus/lib/middleware.js:181:7)
at next (/app/node_modules/express/node_modules/connect/lib/http.js:204:15)
at Object.methodOverride [as handle] (/app/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:35:5)

以及失败的代码段:

pool.getConnection(function(err, connection) {

app.get('/', function(req, res){

connection.query('QUERY_HERE', function(err, rows, fields) {
if (err) throw console.log(err);

res.render('index', {
global_title: S(site_title).stripTags().s,
title: S(rows[0].title).stripTags().s,
bodytext: sanitize(sanitizer.sanitize(rows[0].content)).xss()
});

connection.end();

});
});
//end connection
});

这是 Heroku 在浏览器或日志中给我的唯一错误,并且构建它似乎没有任何问题。

我在这里有点不知所措,所以希望有人能准确指出我在哪里是个白痴,并让我在联系 Heroku 之前继续前进!

提前致谢。

更新:

使用 Pascal Belloncle 建议的代码更改来捕获日志中的错误会在浏览器中产生应用程序错误,并在日志中产生以下内容:

 connection.query(QUERY, function(err, row
at Handshake.Sequence.end (/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:66:24)
at Protocol.handleNetworkError (/app/node_modules/mysql/lib/protocol/Protocol.js:230:14)
at Socket.EventEmitter.emit (events.js:126:20)
at Socket._destroy.self.errorEmitted (net.js:328:14)
TypeError: Cannot call method 'query' of undefined
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
at Handshake.Pool.getConnection [as _callback] (/app/node_modules/mysql/lib/Pool.js:35:9)
at Connection._handleNetworkError (/app/node_modules/mysql/lib/Connection.js:145:18)
at /app/web.js:40:15

似乎仍然在同一点崩溃,没有任何有用的错误。

更新2:

错误消息!

2013-02-06T06:32:57+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path=/ host=trash-media.herokuapp.com fwd=31.3.253.10 dyno=web.1 queue=0ms wait=0ms connect=4ms service=21033ms status=503 bytes=0

https://devcenter.heroku.com/articles/error-codes#h13-connection-closed-without-response

更新3:

看到更新 2 中的错误消息并对 RDS 中的安全设置进行一些修改后,现在看来这与托管 Heroku 的位置(us-west)和我的 RDS 数据库之间的可用区域差异有关是(欧盟-西线)。我已经向 Heroku 支持提出了这个问题,如果我得到一个答案,我会用一个答案来结束这个问题,并希望有一个可行的解决方案或解决方法。

最佳答案

检查第一行err的值。如果连接未定义,很可能是因为您有错误。

另外,您应该在每个请求上获得一个新连接,然后返回到池中。

app.get('/', function(req, res){
pool.getConnection(function(err, connection) {
if (err) {
console.error("getConnection", err);
}
// do stuff here
connection.end(); // return connection to the pool
});
});

关于mysql - Heroku Node.js 应用程序无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com